<?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>169187</bug_id>
          
          <creation_ts>2017-03-05 13:54:22 -0800</creation_ts>
          <short_desc>WebAssembly: Make WebAssembly.instantiate/compile truly asynchronous</short_desc>
          <delta_ts>2017-04-02 10:04:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=170390</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=170391</see_also>
          <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>165982</dependson>
          <blocked>159775</blocked>
    
    <blocked>170066</blocked>
    
    <blocked>170187</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1283621</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 13:54:22 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290294</commentid>
    <comment_count>1</comment_count>
      <attachid>305148</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-22 18:16:04 -0700</bug_when>
    <thetext>Created attachment 305148
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290459</commentid>
    <comment_count>2</comment_count>
      <attachid>305199</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-23 09:11:40 -0700</bug_when>
    <thetext>Created attachment 305199
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290735</commentid>
    <comment_count>3</comment_count>
      <attachid>305266</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-23 22:17:21 -0700</bug_when>
    <thetext>Created attachment 305266
Builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291207</commentid>
    <comment_count>4</comment_count>
      <attachid>305377</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-25 09:13:34 -0700</bug_when>
    <thetext>Created attachment 305377
works but needs tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291408</commentid>
    <comment_count>5</comment_count>
      <attachid>305377</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-26 23:00:24 -0700</bug_when>
    <thetext>Comment on attachment 305377
works but needs tests

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

LGTM so far. Some drive by comments. I&apos;ll review more when it applies to ToT and has a changelog and tests.

&gt; Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp:83
&gt; +void PromiseDeferredTimer::addPendingPromise(JSPromiseDeferred* ticket, Vector&lt;Strong&lt;JSCell&gt;&gt;&amp;&amp; dependancies)

typo: &quot;dependancies&quot; =&gt; &quot;dependencies&quot;

&gt; Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp:130
&gt; +    ASSERT(m_vm-&gt;currentThreadIsHoldingAPILock());
&gt; +    auto result = m_blockedTasks.add(blockingTicket, Vector&lt;Task&gt;());
&gt; +    result.iterator-&gt;value.append(WTFMove(task));

What&apos;s the behavior here if m_tasks doesn&apos;t have a task w/ blocking ticket? Maybe worth a debug assertion?

&gt; Source/JavaScriptCore/runtime/PromiseDeferredTimer.h:77
&gt; +
&gt; +

Style: Please remove extra whitespace.

&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:124
&gt; +    // In order to avoid potentially recompiling a module. We first allocate its gather all the import/memory information prior to
&gt; +    // generating any code. If we didn&apos;t do this we might choose to compile with Signaling memory but actually get a Bonuds Checking
&gt; +    // memory then have to recompile.

Please rewrite this paragraph. It has some typos and missing words.

&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:141
&gt; +    Vector&lt;Strong&lt;JSCell&gt;&gt; dependancies;

typo

&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:147
&gt; +        vm.promiseDeferredTimer-&gt;scheduleBlockedTask(instance-&gt;codeBlock()-&gt;promise(), [&amp;vm, promise, instance, module, entries] () {

Is the promise parameter different than instance-&gt;codeBlock()-&gt;promise?

&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:161
&gt; +    // FIXME: This reparses the module header, which shouldn&apos;t be necessary.

Please fie a bug and link to it here.

&gt; Source/JavaScriptCore/wasm/WasmPlan.cpp:244
&gt; +            dataLogLn(&quot;Getting the lock: fail&quot;);

please remove

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:51
&gt; +    typedef AutomaticThread Base;

Style: I think we&apos;re starting to use &quot;using&quot; for this type of thing

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:120
&gt; +        Plan* plan = element.plan.get();
&gt; +        ASSERT(plan);
&gt; +        if (!plan-&gt;hasBeenPrepared()) {
&gt; +            plan-&gt;parseAndValidateModule();
&gt; +            if (!plan-&gt;hasWork())
&gt; +                return complete();
&gt; +            
&gt; +            plan-&gt;prepare();
&gt; +
&gt; +            LockHolder locker(*worklist.m_lock);
&gt; +            element.nextPriority();
&gt; +            worklist.m_queue.push(element);
&gt; +            worklist.m_planEnqueued-&gt;notifyAll(locker);
&gt; +        }
&gt; +
&gt; +        // FIXME: this should check in at some occasionally to see if there are new, higher priority, plans that need to be run.
&gt; +        plan-&gt;compileFunctions();
&gt; +        ASSERT(!plan-&gt;hasWork());
&gt; +        attemptToRemoveCompilationPlan(holdLock(*worklist.m_lock));
&gt; +        return complete();

If a plan can ever be enqueued twice, the above`if (!plan-&gt;hasBeenPrepared()) { ... }` is racy. If it can&apos;t be, perhaps you can add an assertion to enqueue(...) to make this explicit.

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:155
&gt; +void Worklist::enqueue(JSPromiseDeferred* promise, RefPtr&lt;Plan&gt; plan)

Can a Plan ever be enqueued twice?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:175
&gt; +        // FIXME: we should have our own PriorityQueue that doesn&apos;t suck.

Please open a bug for this. I agree

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:187
&gt; +            elements.push_back(m_queue.top());

What are the semantics of this?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:203
&gt; +    unsigned numberOfCompilationThreads = Options::useConcurrentJIT() ? WTF::numberOfProcessorCores() - 1 : 1; // Save a core for the main thread.

This mostly seems good, but it&apos;ll be unfortunate if the main thread isn&apos;t doing anything, and we could be using an extra core. Can we just have one thread that has super lower priority?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:233
&gt; +
&gt; +

Style: remove whitespace.

&gt; Source/JavaScriptCore/wasm/WasmWorklist.h:51
&gt; +    JS_EXPORT_PRIVATE void enqueue(JSPromiseDeferred*, RefPtr&lt;Plan&gt;);

Why not Ref&lt;Plan&gt;?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.h:95
&gt; +    // Technically, this could overflow but that&apos;s unlikely. Even if it did, we will just compile things of the same
&gt; +    // Priority it the wrong order, which isn&apos;t wrong, just suboptimal.

Why not just use uint64_t and make this even more effectively impossible?

&gt; JSTests/wasm/js-api/web-assembly-instantiate.js:1
&gt; +asyncTest(7);

This is the wrong API for something like this. It&apos;s going to be really crappy to have to manually count the number of tests. We will definitely get this wrong in the future. Instead, lets make an API like this:

runAsyncTest(function(pass) {
   // do some async work.
   // call pass when done
});
and the test fails if an exception is thrown from that function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291410</commentid>
    <comment_count>6</comment_count>
      <attachid>305448</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-26 23:39:13 -0700</bug_when>
    <thetext>Created attachment 305448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291411</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-26 23:41:42 -0700</bug_when>
    <thetext>Attachment 305448 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/JSWebAssembly.cpp:176:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:113:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:117:  Extra space before )  [whitespace/parens] [2]
Total errors found: 3 in 51 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>1291413</commentid>
    <comment_count>8</comment_count>
      <attachid>305449</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 00:00:38 -0700</bug_when>
    <thetext>Created attachment 305449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291414</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-27 00:03:15 -0700</bug_when>
    <thetext>Attachment 305449 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/JSWebAssembly.cpp:176:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:113:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:117:  Extra space before )  [whitespace/parens] [2]
Total errors found: 3 in 51 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>1291415</commentid>
    <comment_count>10</comment_count>
      <attachid>305450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 00:17:31 -0700</bug_when>
    <thetext>Created attachment 305450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291416</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-27 00:20:42 -0700</bug_when>
    <thetext>Attachment 305450 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/JSWebAssembly.cpp:176:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:113:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:117:  Extra space before )  [whitespace/parens] [2]
Total errors found: 3 in 52 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>1291420</commentid>
    <comment_count>12</comment_count>
      <attachid>305451</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 00:27:39 -0700</bug_when>
    <thetext>Created attachment 305451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291421</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-27 00:29:45 -0700</bug_when>
    <thetext>Attachment 305451 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/JSWebAssembly.cpp:176:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:113:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:117:  Extra space before )  [whitespace/parens] [2]
Total errors found: 3 in 52 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>1291426</commentid>
    <comment_count>14</comment_count>
      <attachid>305451</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-27 01:11:03 -0700</bug_when>
    <thetext>Comment on attachment 305451
Patch

Attachment 305451 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/3416753

New failing tests:
profiler-test.yaml/tests/sunspider-1.0/access-nbody.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/bitops-bits-in-byte.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/string-validate-input.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/string-tagcloud.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/access-fannkuch.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/string-unpack-code.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/string-base64.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/regexp-dna.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/3d-cube.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/controlflow-recursive.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/bitops-3bit-bits-in-byte.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/math-cordic.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/string-fasta.js.profiler-simple
stress/tail-call-profiler.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/crypto-aes.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/3d-morph.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/access-binary-trees.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/date-format-tofte.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/3d-raytrace.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/bitops-nsieve-bits.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/crypto-sha1.js.profiler-simple
stress/op-push-name-scope-crashes-profiler.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/bitops-bitwise-and.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/math-partial-sums.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/crypto-md5.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/date-format-xparb.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/math-spectral-norm.js.profiler-simple
profiler-test.yaml/tests/sunspider-1.0/access-nsieve.js.profiler-simple</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291495</commentid>
    <comment_count>15</comment_count>
      <attachid>305451</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-03-27 09:54:31 -0700</bug_when>
    <thetext>Comment on attachment 305451
Patch

r-
Looks like this patch breaks the profiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291515</commentid>
    <comment_count>16</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 10:33:13 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #15)
&gt; Comment on attachment 305451 [details]
&gt; Patch
&gt; 
&gt; r-
&gt; Looks like this patch breaks the profiler.

Yeah, I&apos;m looking into it. It looks like the GC doesn&apos;t like that I&apos;m stopping the run loop when all the async tasks are finished. I&apos;m not sure how to get around that. I suppose we could just not profile anything async but that would be unfortunate...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291517</commentid>
    <comment_count>17</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 10:34:50 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #16)
&gt; (In reply to Michael Saboff from comment #15)
&gt; &gt; Comment on attachment 305451 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; r-
&gt; &gt; Looks like this patch breaks the profiler.
&gt; 
&gt; Yeah, I&apos;m looking into it. It looks like the GC doesn&apos;t like that I&apos;m
&gt; stopping the run loop when all the async tasks are finished. I&apos;m not sure
&gt; how to get around that. I suppose we could just not profile anything async
&gt; but that would be unfortunate...

It also only seems to happen in release, which is weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291650</commentid>
    <comment_count>18</comment_count>
      <attachid>305519</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 15:30:14 -0700</bug_when>
    <thetext>Created attachment 305519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291651</commentid>
    <comment_count>19</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-27 15:33:13 -0700</bug_when>
    <thetext>Attachment 305519 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/JSWebAssembly.cpp:174:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:113:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:117:  Extra space before )  [whitespace/parens] [2]
Total errors found: 3 in 53 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>1291652</commentid>
    <comment_count>20</comment_count>
      <attachid>305520</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 15:41:31 -0700</bug_when>
    <thetext>Created attachment 305520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291672</commentid>
    <comment_count>21</comment_count>
      <attachid>305524</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-27 16:31:56 -0700</bug_when>
    <thetext>Created attachment 305524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291901</commentid>
    <comment_count>22</comment_count>
      <attachid>305595</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 08:32:04 -0700</bug_when>
    <thetext>Created attachment 305595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291932</commentid>
    <comment_count>23</comment_count>
      <attachid>305602</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 10:32:08 -0700</bug_when>
    <thetext>Created attachment 305602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292094</commentid>
    <comment_count>24</comment_count>
      <attachid>305602</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-28 14:32:18 -0700</bug_when>
    <thetext>Comment on attachment 305602
Patch

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

r=me with comments

&gt; Source/JavaScriptCore/ChangeLog:30
&gt; +        WebAssembly.instantiate() then new WebAssembly() on the same

typo: &quot;new WebAssembly()&quot; =&gt; &quot;new WebAssembly.Instance()&quot;

&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:155
&gt; +    // FIXME: This reparses the module header, which shouldn&apos;t be necessary.

Please file a bug and link it here.

&gt; Source/JavaScriptCore/wasm/WasmPlan.cpp:327
&gt; +

please revert

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:69
&gt; +    void attemptToRemoveCompilationPlan(const AbstractLocker&amp;)
&gt; +    {
&gt; +        auto&amp; queue = worklist.m_queue;
&gt; +
&gt; +        if (queue.empty())
&gt; +            return;
&gt; +
&gt; +        if (queue.top().plan == element.plan)
&gt; +            queue.pop();
&gt; +    }

This function looks error prone. Why not just have something that straight up removes the plan from the queue?
What if something is enqueued w/ higher priority, and element.plan is no longer at the top of the queue?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:85
&gt; +            if (!queue.top().plan-&gt;hasBeenPrepared())
&gt; +                queue.pop();

Style nit: I think this is a tad easier to to read if you just return PollResult::Work after pop().

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:119
&gt; +        // FIXME: this should check in at some occasionally to see if there are new, higher priority e.g. synchronous, plans that need to be run.

Please file a bug and link to it here.

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:133
&gt; +void Worklist::QueueElement::nextPriority()

Style nit: Maybe call this something that indicates it&apos;s mutating the priority. Maybe, &quot;setToNextPriority&quot;?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:240
&gt; +    LockHolder locker(*m_lock);

Why do we need to hold the lock here?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:268
&gt; +
&gt; +

style: remove extra white space.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:49
&gt; +    module()-&gt;m_codeBlocks[static_cast&lt;size_t&gt;(mode)].set(vm, this, this);

Shouldn&apos;t this be a write barrier with the module as the owner?
Why not have a Module::setCodeBlock(Mode, CodeBlock*) function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292128</commentid>
    <comment_count>25</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-28 15:22:01 -0700</bug_when>
    <thetext>Also, please file a bug about getting the run loop to work in the shell in other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292130</commentid>
    <comment_count>26</comment_count>
      <attachid>305602</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 15:26:11 -0700</bug_when>
    <thetext>Comment on attachment 305602
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/JSWebAssembly.cpp:155
&gt;&gt; +    // FIXME: This reparses the module header, which shouldn&apos;t be necessary.
&gt; 
&gt; Please file a bug and link it here.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmPlan.cpp:327
&gt;&gt; +
&gt; 
&gt; please revert

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:69
&gt;&gt; +    }
&gt; 
&gt; This function looks error prone. Why not just have something that straight up removes the plan from the queue?
&gt; What if something is enqueued w/ higher priority, and element.plan is no longer at the top of the queue?

I think it should still work but I switched the code to just remove the plan in the poll case and do this in the work case.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:85
&gt;&gt; +                queue.pop();
&gt; 
&gt; Style nit: I think this is a tad easier to to read if you just return PollResult::Work after pop().

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:119
&gt;&gt; +        // FIXME: this should check in at some occasionally to see if there are new, higher priority e.g. synchronous, plans that need to be run.
&gt; 
&gt; Please file a bug and link to it here.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:133
&gt;&gt; +void Worklist::QueueElement::nextPriority()
&gt; 
&gt; Style nit: Maybe call this something that indicates it&apos;s mutating the priority. Maybe, &quot;setToNextPriority&quot;?

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:240
&gt;&gt; +    LockHolder locker(*m_lock);
&gt; 
&gt; Why do we need to hold the lock here?

I&apos;m not 100% sure why that&apos;s what the other places that use AutomaticThread do.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:268
&gt;&gt; +
&gt; 
&gt; style: remove extra white space.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:49
&gt;&gt; +    module()-&gt;m_codeBlocks[static_cast&lt;size_t&gt;(mode)].set(vm, this, this);
&gt; 
&gt; Shouldn&apos;t this be a write barrier with the module as the owner?
&gt; Why not have a Module::setCodeBlock(Mode, CodeBlock*) function?

Whoops, your right. Fixed. Also, I added the setCodeBlock function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292161</commentid>
    <comment_count>27</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-28 16:12:22 -0700</bug_when>
    <thetext>Committed r214504: &lt;http://trac.webkit.org/changeset/214504&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293117</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-03-31 01:24:19 -0700</bug_when>
    <thetext>Does this patch requires any platform specific code in Linux, it seems it caused 4 wasm tests to crash in GTK+ port:

wasm.yaml/wasm/js-api/web-assembly-instantiate-parallel.js.default-wasm: Segmentation fault (core dumped)
                         
wasm.yaml/wasm/js-api/web-assembly-instantiate-parallel.js.default-wasm: ERROR: Unexpected exit code: 139
                                    
wasm.yaml/wasm/js-api/web-assembly-compile-parallel.js.default-wasm: Segmentation fault (core dumped)
                                    
wasm.yaml/wasm/js-api/web-assembly-compile-parallel.js.default-wasm: ERROR: Unexpected exit code: 139
                                    
wasm.yaml/wasm/js-api/web-assembly-instantiate.js.default-wasm: Segmentation fault (core dumped)
                                    
wasm.yaml/wasm/js-api/web-assembly-instantiate.js.default-wasm: ERROR: Unexpected exit code: 139
                                   
wasm.yaml/wasm/js-api/Module-compile.js.default-wasm: Segmentation fault (core dumped)
                                    
wasm.yaml/wasm/js-api/Module-compile.js.default-wasm: ERROR: Unexpected exit code: 139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293296</commentid>
    <comment_count>29</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-31 14:14:31 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #28)
&gt; Does this patch requires any platform specific code in Linux, it seems it
&gt; caused 4 wasm tests to crash in GTK+ port:
&gt; 
&gt; wasm.yaml/wasm/js-api/web-assembly-instantiate-parallel.js.default-wasm:
&gt; Segmentation fault (core dumped)
&gt;                          
&gt; wasm.yaml/wasm/js-api/web-assembly-instantiate-parallel.js.default-wasm:
&gt; ERROR: Unexpected exit code: 139
&gt;                                     
&gt; wasm.yaml/wasm/js-api/web-assembly-compile-parallel.js.default-wasm:
&gt; Segmentation fault (core dumped)
&gt;                                     
&gt; wasm.yaml/wasm/js-api/web-assembly-compile-parallel.js.default-wasm: ERROR:
&gt; Unexpected exit code: 139
&gt;                                     
&gt; wasm.yaml/wasm/js-api/web-assembly-instantiate.js.default-wasm: Segmentation
&gt; fault (core dumped)
&gt;                                     
&gt; wasm.yaml/wasm/js-api/web-assembly-instantiate.js.default-wasm: ERROR:
&gt; Unexpected exit code: 139
&gt;                                    
&gt; wasm.yaml/wasm/js-api/Module-compile.js.default-wasm: Segmentation fault
&gt; (core dumped)
&gt;                                     
&gt; wasm.yaml/wasm/js-api/Module-compile.js.default-wasm: ERROR: Unexpected exit
&gt; code: 139

Yeah, those tests are going to fail because the JSC CLI doesn&apos;t know how to run the runloop if you don&apos;t have CFRunLoop. Other than that I don&apos;t believe anything special should be needed. Do you have any of the backtraces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293298</commentid>
    <comment_count>30</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-31 14:19:41 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #29)
&gt; Yeah, those tests are going to fail because the JSC CLI doesn&apos;t know how to
&gt; run the runloop if you don&apos;t have CFRunLoop. Other than that I don&apos;t believe
&gt; anything special should be needed. Do you have any of the backtraces?

I&apos;m actually a little surprised it&apos;s crashing. If I had to guess, it&apos;s crashing because there isn&apos;t a timer set up for the PromiseDeferredTimer so we deref null. Perhaps there is a bug that only shows on Linux, though. Hard to tell without the backtrace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293534</commentid>
    <comment_count>31</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-02 09:59:34 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #30)
&gt; (In reply to Keith Miller from comment #29)
&gt; &gt; Yeah, those tests are going to fail because the JSC CLI doesn&apos;t know how to
&gt; &gt; run the runloop if you don&apos;t have CFRunLoop. Other than that I don&apos;t believe
&gt; &gt; anything special should be needed. Do you have any of the backtraces?
&gt; 
&gt; I&apos;m actually a little surprised it&apos;s crashing. If I had to guess, it&apos;s
&gt; crashing because there isn&apos;t a timer set up for the PromiseDeferredTimer so
&gt; we deref null. Perhaps there is a bug that only shows on Linux, though. Hard
&gt; to tell without the backtrace.

Right, there are two different problems, one is the crash that happens before the timer is used (see bug #170390) and the other is that promise deferred callback is only implemented by CF. With the crashes fixed, then tests fail instead of crash:

wasm.yaml/wasm/js-api/Module-compile.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/js-api/web-assembly-compile-parallel.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/js-api/web-assembly-instantiate.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/js-api/web-assembly-instantiate-parallel.js.default-wasm: ERROR: Unexpected exit code: 3</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305148</attachid>
            <date>2017-03-22 18:16:04 -0700</date>
            <delta_ts>2017-03-23 09:11:37 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-169187-20170322181603.patch</filename>
            <type>text/plain</type>
            <size>143952</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YmVhYjMwZWVhZjQwZWZiMDU5MTE0YWZhMmRiNjljNmMwZjcwNGFkLi5jMThkZDQ1ZGNmNjBjMDIy
Nzg0NzUxNTkxYTNiZTk1NTdjZDFlMWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTcgQEAKKzIwMTctMDMtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxT
d2VlcGVyOjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVy
OjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
Lmg6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHA6CisgICAgICAgIChK
U0M6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcik6CisgICAgICAg
ICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNSdW5M
b29wVGltZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFRpbWVyLmNwcC4KKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVy
KToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNldFJ1bkxvb3ApOgorICAgICAgICAo
SlNDOjpKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKToKKyAgICAgICAgKEpTQzo6SlNS
dW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVy
OjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OmNhbmNlbFRp
bWVyKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6
OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGlt
ZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5k
aW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQ
ZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hl
ZHVsZVdvcmtTb29uKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVk
dWxlQmxvY2tlZFRhc2spOgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpuZXh0VGlja2V0
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dlYkFzc2VtYmx5LmNwcDoK
KyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxl
RnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGls
ZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMpOgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5oOgorICAgICAgICAqIHdhc20vSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptYXhpbXVtKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpt
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjppbnRlcm5hbEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzZXRNZW1vcnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjptb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbGVk
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzV29yayk6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46Omhhc0JlZW5QcmVwYXJlZCk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVy
cm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Om1vdmVUb1N0YXRlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdh
c20vV2FzbVdvcmtsaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0
OjpRdWV1ZUVsZW1lbnQ6Om11bHRpVGhyZWFkZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpXb3JrbGlzdCk6
CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVdvcmtsaXN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
bmV4dFRpY2tldCk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpDb21wYXJhdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAo
SlNDOjpjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1v
cnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZVN0dWIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjphZGRD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9j
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseU1vZHVsZTo6c291cmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UpOiBEZWxldGVkLgorCiAy
MDE3LTAzLTIyICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFtKU0NdIFVzZSBqc05vbnRyaXZpYWxTdHJpbmcgZm9yIE51bWJlciB0b1N0cmluZyBvcGVy
YXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg1ZTE4ZDU1YmQxMzhiOTE3
YTMyNTc4ODViZGVlMzkzOTQzOWUzN2YuLmE2N2Y5YzYwZTFiZWFkYTc0YzZmODM3M2E2YTMxYWFm
ZmZkOTFkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzE0LDEzICsxMzE0
LDE5IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUx
QjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9m
aWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJD
OTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAg
Ki87IH07Ci0JCTUyRjZDMzVEMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwICovOyB9OworICAgICAgICAgICAgICAgIDUyRjZDMzVEMUU3MUVCMDgwMDgxRjRDQyAvKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uY3BwICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0Mg
LyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkMxRDVD
RTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi87IH07CisgICAgICAgICAgICAgICAgNTMwRkIz
MDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5oICovOyB9OworCQk1MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdv
cmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovOyB9OworICAg
ICAgICAgICAgICAgIDUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkMxRDVDRTY3
NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi87IH07CiAJCTUzMTM3NEJGMUQ1Q0U5NTAwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovOyB9Owog
CQk1MzNCMTVERjFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8q
IFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MzQxRkM3MDFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM2
RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CiAJ
CTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMz
NDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OworCQk1MzQ2Mzg3
MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5oICovOyB9OworCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLzsg
fTsKKwkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3NDFF
NzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLzsgfTsKKwkJNTM0NjM4
NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc2MUU3MUUwNkUwMEYx
MkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMxNzk1
QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTUz
NDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FG
IC8qIEpTVHlwZWRBcnJheS5jcHAgKi87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNCOCAv
KiBUeXBlZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5j
cHAgKi87IH07CkBAIC0yMjMwLDggKzIyMzYsNiBAQAogCQlDMkNGMzlDMTE2RTE1QTgxMDBERDY5
QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBl
ck9iamVjdC5tbSAqLzsgfTsKIAkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3Jh
cHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovOyB9
OwogCQlDMkRBNzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyREE3NzgyMThFMjU5OTkwMDY2
RkNCNiAvKiBIZWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUMyRTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi87IH07Ci0JCUMyRTUyNkJFMTU5MEVG
MDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkYwRjJE
MTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5
IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVC
YXNpY0Jsb2NrLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNzk1LDEz
ICszNzk5LDE5IEBACiAJCTUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVBy
b2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisgICAgICAgICAgICAgICAg
NTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzEzNzRC
QzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKyAgICAgICAg
ICAgICAgICA1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisgICAgICAgICAgICAgICAgNTMxMzc0QkMx
RDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJF
MUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSdW5Mb29w
VGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIxRTcwRDAxNTAw
RjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQ
cm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8q
IFR5cGVkQXJyYXlDVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBUeXBlZEFycmF5Q1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJyYXlDVGVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzgyLDggKzQ3OTIsNiBAQAogCQlD
MkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyog
SlNBUElXcmFwcGVyT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
QVBJV3JhcHBlck9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkRBNzc4
MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGVhcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlUmFy
ZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUwQzE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2Nr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODk5LDggKzU5MDcsNiBAQAogCQkJ
CUE1NEMyQUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCAqLywKIAkJCQlBNTMx
MUMzNDFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgKi8sCiAJCQkJ
QTUzMTFDMzUxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCAqLywKLQkJ
CQlDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywKLQkJCQlDMkU1
MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8sCiAJCQkJMEZBREU2NzIxRDRE
MjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1
QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0MxNTc1NDRBOTAw
MjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLApAQCAtNjI3MSw2ICs2Mjc3LDggQEAK
IAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAogCQkJ
CTUzRkY3RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwICovLAogCQkJCTUz
RkY3Rjk4MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuaCAqLywKKwkJCQk1MzBGQjMw
MzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLywKKwkJCQk1MzBGQjMwMTFF
N0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHdh
c207CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNjQyNyw2ICs2NDM1LDggQEAKIAkJ
CQkxNEExNTYzMDEwOTY2MzY1MDA2RkEyNjAgLyogRGF0ZUluc3RhbmNlQ2FjaGUuaCAqLywKIAkJ
CQlCQ0QyMDM0NzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
QkNEMjAzNDgwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUuaCAqLywKKwkJCQk1MzQ2
Mzg3NjFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICovLAorCQkJ
CTUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oICovLAog
CQkJCTE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMu
aCAqLywKIAkJCQkwRkUwNTAwRjFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmNw
cCAqLywKIAkJCQkwRkUwNTAxMDFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmgg
Ki8sCkBAIC02ODE1LDYgKzY4MjUsOCBAQAogCQkJCTBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1MSAv
KiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi8sCiAJCQkJQkNEMjAyQkYwRTE3MDZBNzAwMkM3RTgy
IC8qIFJlZ0V4cFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNEMjAyQzAwRTE3MDZBNzAwMkM3RTgy
IC8qIFJlZ0V4cFByb3RvdHlwZS5oICovLAorCQkJCTUzNDYzODcyMUU3MEQwMTUwMEYxMkFDMSAv
KiBKU1J1bkxvb3BUaW1lci5jcHAgKi8sCisJCQkJNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8q
IEpTUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNzBCMEE5RDAxQTlCNjYyMDAwMDEzMDZBIC8qIFJ1
bnRpbWVGbGFncy5oICovLAogCQkJCTUyNzc3M0REMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1l
VHlwZS5jcHAgKi8sCiAJCQkJNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBl
LmggKi8sCkBAIC04MTA4LDYgKzgxMjAsNyBAQAogCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MDgxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzBGQjMw
MjFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjI3LDYgKzgyNDAsNyBAQAogCQkJCUJDMThDM0VEMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyN0ExQTc5NTdC
MjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDhERTBFRDIy
MDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzQ2Mzg3NTFF
NzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNo
dWZmbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyog
Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTg1MTMsNiArODUyNyw3IEBACiAJCQkJ
RTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDhFM0MxREE0MUI4MTAwMzk0NzhGIC8qIERPTUpJVFBh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAv
KiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2RjU2REUxRTY0RUFENjAw
RDE3ODAxIC8qIFZNVHJhcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzN0FEODNDMURBNDkyODYw
MEYzRDQxMiAvKiBET01KSVRQYXRjaHBvaW50UGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzdBRDgzRDFEQTQ5Mjg2MDBGM0Q0MTIgLyogRE9NSklUUmVnLmggaW4gSGVhZGVycyAqLywKQEAg
LTg2ODEsNyArODY5Niw2IEBACiAJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8qIEhlYXBQ
cm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0QzJBQjExQzY1NDRGMjAwQTE4RDc4IC8q
IEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMTFDMzYxQzc3Q0VDNTAwRTZC
MUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyRTUyNkJF
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBF
NUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZBREU2NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC05OTQ5LDYgKzk5NjMsNyBAQAogCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUwRjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDIyQTYyMUMxNThFNkEwMEUyRUI5OCAvKiBCM0NvbnN0
RmxvYXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOERGNTFCRTkzRDU1MDAxM0M4
OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTBE
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAyNDIsNiArMTAyNTcsNyBAQAogCQkJCTE0QUQ5MTE3MURDQTk3RkQwMDE0RjlGRSAvKiBFdmFs
Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzM0MUUyMURDMkNFOTYwMEFBMjlC
QSAvKiBFdmFsRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTQ5ODIwMzE4OTFE
MEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNDYzODcz
MUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTFDMEZGRjFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTJERTBGMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNl
cHRpb25GdXp6LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAzMTksOCArMTAzMzUsOCBAQAogCQkJ
CUE1Mzk4RkFDMUM3NTBEQTYwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU0QzJBQjAxQzY1NDRFRTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTMxMUMzNzFDNzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQg
LyogSGVhcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNDY4MEQ0MTRCQkQyNDkwMEJG
RTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGRTdCQTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZl
cmlmaWVyLmNwcCBpbiBTb3VyY2VzICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwRjQ2ODBENDE0QkJEMjQ5MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlEQzIxNDMwODFDQTMyRTU4MDAwQTg4NjkgLyogSUNTdGF0cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRTEwN0VDMzc2MDA0MjdBNDggLyogSWRlbnRpZmll
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRl
bnRpZmllcnNGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA2NDMsNiArMTA2NTksNyBA
QAogCQkJCTk5MkFCQ0Y5MUJFQTlCRDIwMDY0MDNBMCAvKiBSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MkY1NkI0MUU0RTg0QTQwMDM1OTUzQiAvKiBSZW1v
dGVDb25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk5OEVENjc0
MUJFRDcwQUMwMEREODAxNyAvKiBSZW1vdGVDb250cm9sbGFibGVUYXJnZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTM0NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBS
ZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5NTU2Njg2MUU0
RThCMEYwMEFBRTEzQyAvKiBSZW1vdGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTkyRjU2QjUxRTRFODRBODAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvckNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2
aXR5Q2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxs
YmFjay5oCmluZGV4IGRkZWUyNTgzZTQ5ZTZiOTY5MzkwODBlMzM4ZWI1YTk5YzA0MGI5MmMuLjM5
YzJiMzY4MzY2MjViYTk2OThmNTAyYjI5NjVmNmM5NTZmM2RiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCkBAIC0yOCw3ICsyOCw3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5jbHVkZSAiUnVu
TG9vcFRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKENGKQpAQCAt
NDAsOCArNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJh
Y2s7CiBjbGFzcyBIZWFwOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2Fs
bGJhY2sgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHR5cGVk
ZWYgUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgc3RhdGljIFJlZlB0cjxGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrPiBjcmVhdGVGdWxsVGltZXIoSGVhcCopOwogICAgIHN0YXRpYyBSZWZQdHI8R0NBY3Rp
dml0eUNhbGxiYWNrPiBjcmVhdGVFZGVuVGltZXIoSGVhcCopOwogCkBAIC03MCwyMSArNzEsMjEg
QEAgcHJvdGVjdGVkOgogCiAjaWYgVVNFKENGKQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSog
dm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAgICAg
ICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxheShzX2RlY2FkZSkKICAgICB7CiAg
ICAgfQogI2VsaWYgVVNFKEdMSUIpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAg
ICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2Vu
YWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsKICAgICB9CiAj
ZWxzZQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVy
KHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAg
ewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk2MTI4ZDAzODM4Y2E0YTc0NTUwZWQ5MTZkZjc3YTMy
NWQ2YjQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCi0K
LSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJJbmNyZW1lbnRhbFN3
ZWVwZXIuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0j
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNFKEdMSUIpCi0jaW5jbHVkZSA8Z2xpYi5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgVVNFKENGKQotICAgIAotY29uc3Qg
Q0ZUaW1lSW50ZXJ2YWwgSGVhcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAq
IDEwOwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0gICAgOiBtX3ZtKHZtKQotICAg
ICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotewotICAgIHNldFJ1bkxvb3Aodm0tPmhlYXAu
cnVuTG9vcCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVm
IHJ1bkxvb3ApCi17Ci0gICAgaWYgKG1fcnVuTG9vcCkgewotICAgICAgICBDRlJ1bkxvb3BSZW1v
dmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25N
b2Rlcyk7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsK
LSAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7Ci0gICAgICAgIG1fdGltZXIuY2xlYXIoKTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKHJ1bkxvb3ApIHsKLSAgICAgICAgbV9ydW5Mb29wID0gcnVuTG9v
cDsKLSAgICAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BUaW1lckNv
bnRleHQpKTsKLSAgICAgICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOwotICAgICAgICBtX3RpbWVy
ID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzX2Rl
Y2FkZSwgc19kZWNhZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250ZXh0
KSk7Ci0gICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5n
ZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICB9Ci19Ci0KLUhlYXBUaW1lcjo6fkhl
YXBUaW1lcigpCi17Ci0gICAgc2V0UnVuTG9vcCgwKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnRp
bWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29udGV4dFB0cikKLXsKLSAgICBI
ZWFwVGltZXIqIHRpbWVyID0gc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4oY29udGV4dFB0cik7Ci0g
ICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgUmVmUHRyPFZNPiB2bSA9IHRpbWVy
LT5tX2FwaUxvY2stPnZtKCk7Ci0gICAgaWYgKCF2bSkgewotICAgICAgICAvLyBUaGUgVk0gaGFz
IGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgotICAgICAgICB0aW1l
ci0+bV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7Ci0gICAgICAgIHRpbWVyLT5k
b1dvcmsoKTsKLSAgICB9Ci0KLSAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKLX0KLQot
dm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQot
ewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJz
b2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIG1faXNTY2hl
ZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQotewotICAg
IENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVU
aW1lR2V0Q3VycmVudCgpICsgc19kZWNhZGUpOwotICAgIG1faXNTY2hlZHVsZWQgPSBmYWxzZTsK
LX0KLQotI2VsaWYgVVNFKEdMSUIpCi0KLWNvbnN0IGxvbmcgSGVhcFRpbWVyOjpzX2RlY2FkZSA9
IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOwotCi1zdGF0aWMgR1NvdXJjZUZ1bmNzIGhlYXBUaW1l
clNvdXJjZUZ1bmN0aW9ucyA9IHsKLSAgICBudWxscHRyLCAvLyBwcmVwYXJlCi0gICAgbnVsbHB0
ciwgLy8gY2hlY2sKLSAgICAvLyBkaXNwYXRjaAotICAgIFtdKEdTb3VyY2UqLCBHU291cmNlRnVu
YyBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCi0gICAgewotICAgICAg
ICByZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOwotICAgIH0sCi0gICAgbnVsbHB0ciwgLy8gZmlu
YWxpemUKLSAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCi0gICAgbnVsbHB0ciwgLy8g
Y2xvc3VyZV9tYXJzaGFsbAotfTsKLQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAg
IDogbV92bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKLSAgICAsIG1fdGlt
ZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmaGVhcFRpbWVyU291cmNlRnVuY3Rpb25zLCBzaXpl
b2YoR1NvdXJjZSkpKSkKLXsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdldCgpLCAi
W0phdmFTY3JpcHRDb3JlXSBIZWFwVGltZXIiKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2so
bV90aW1lci5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAg
ICAgYXV0byYgaGVhcFRpbWVyID0gKnN0YXRpY19jYXN0PEhlYXBUaW1lcio+KHVzZXJEYXRhKTsK
LSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoaGVhcFRpbWVyLm1fdGltZXIuZ2V0KCks
IGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBIZWFwVGltZXI6OnNfZGVjYWRlICogR19VU0VDX1BF
Ul9TRUMpOwotICAgICAgICBoZWFwVGltZXIudGltZXJEaWRGaXJlKCk7Ci0gICAgICAgIHJldHVy
biBHX1NPVVJDRV9DT05USU5VRTsKLSAgICB9LCB0aGlzLCBudWxscHRyKTsKLSAgICBnX3NvdXJj
ZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0
KCkpOwotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQotewotICAgIGdfc291cmNlX2Rlc3Ry
b3kobV90aW1lci5nZXQoKSk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoKQot
ewotICAgIG1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgaWYgKCFtX2FwaUxvY2stPnZtKCkpIHsK
LSAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3Qg
Z2l2ZSB1cC4KLSAgICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsKLSAgICAg
ICAgZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgbV9hcGlMb2NrLT51bmxvY2soKTsKLX0KLQotdm9p
ZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQotewot
ICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25p
Y190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lz
U2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRpbWVyKCkKLXsK
LSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9u
aWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgbV9pc1NjaGVkdWxl
ZCA9IGZhbHNlOwotfQotI2Vsc2UKLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6
IG1fdm0odm0pCi17Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci19Ci0KLXZvaWQg
SGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxl
VGltZXIoZG91YmxlKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQotewot
fQotI2VuZGlmCi0gICAgCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJiNDcxZjYw
ZGI4YzYzNzRjNTUwMTk4ZDBiZTllMmZjY2E4YTZiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGlt
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdMSUIpCi0jaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBKU0xvY2s7Ci1jbGFzcyBWTTsKLQotY2xhc3MgSGVhcFRpbWVyIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEhlYXBUaW1lcj4gewotcHVibGljOgotICAgIEhlYXBUaW1lcihWTSop
OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgdm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGlt
ZXJSZWYsIHZvaWQqKTsKLSNlbmRpZgotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgfkhlYXBUaW1lcigpOwotICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7Ci0KLSAgICB2
b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKLSAgICB2b2lkIGNh
bmNlbFRpbWVyKCk7Ci0gICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
Y2hlZHVsZWQ7IH0KLQotI2lmIFVTRShDRikKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKLSNlbmRpZiAvLyBVU0UoQ0YpCi0gICAgCi1wcm90ZWN0
ZWQ6Ci0gICAgVk0qIG1fdm07Ci0KLSAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7Ci0gICAg
Ym9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsKLSNpZiBVU0UoQ0YpCi0gICAgc3RhdGljIGNv
bnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOwotCi0gICAgUmV0YWluUHRyPENGUnVuTG9vcFRp
bWVyUmVmPiBtX3RpbWVyOwotICAgIFJldGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVuTG9vcDsK
LSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OwotCi0gICAgTG9jayBt
X3NodXRkb3duTXV0ZXg7Ci0jZWxpZiBVU0UoR0xJQikKLSAgICBzdGF0aWMgY29uc3QgbG9uZyBz
X2RlY2FkZTsKLSAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOwotICAgIEdSZWZQdHI8R1NvdXJjZT4g
bV90aW1lcjsKLSNlbmRpZgotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIGludmFsaWRhdGUoKTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKaW5kZXggY2ZlODliODcwN2NlYmM3ZjRhZjRkNjM1
NjY5NDExZTE3ZGMwYWM1Mi4uOGNiZmE5ZTgwNDBkYzYxZWZiMDE5YjIxNDU1NDQ1NWUyZmE4MzFi
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuY3BwCkBAIC00MSwxMSArNDEsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBzd2VlcFRpbWVN
dWx0aXBsaWVyID0gMS4wIC8gc3dlZXBUaW1lVG90YWw7CiAKIHZvaWQgSW5jcmVtZW50YWxTd2Vl
cGVyOjpzY2hlZHVsZVRpbWVyKCkKIHsKLSAgICBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoc3dl
ZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKKyAgICBCYXNlOjpzY2hlZHVsZVRp
bWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlwbGllcik7CiB9CiAKIEluY3JlbWVu
dGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXApCi0gICAgOiBIZWFwVGlt
ZXIoaGVhcC0+dm0oKSkKKyAgICA6IEJhc2UoaGVhcC0+dm0oKSkKICAgICAsIG1fY3VycmVudEFs
bG9jYXRvcihudWxscHRyKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuaAppbmRleCAzNGZhODhjYzJlZmE3NWM0ZjI4YzA1N2M3ODlhNmFl
MTE5ODAzYmU2Li5kYjQ0ODNjNTQ1YmRiNDQ2ZDA1NjJjZDQ3ZjRjMTc5NTQ5MTI2ZDAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaApAQCAt
MjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1lci5oIgor
I2luY2x1ZGUgIlJ1bkxvb3BUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC0zMyw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSGVh
cDsKIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKIAotY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDog
cHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgUnVu
TG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFJ1bkxvb3BUaW1lciBCYXNlOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEluY3JlbWVudGFsU3dlZXBlcihIZWFwKik7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0U3dlZXBpbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAppbmRleCA2
ZTMxNzZjMmNjNzZiNjg0NGMzYWZlYjA3M2M2YmNhMTNmNDVkM2NjLi45NDBkMzlkZTI0YWNmZDMy
ZDk2YTRhYzIxZWQyYzJhNTMxN2MyMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCkBAIC0zMSw3ICszMSw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogU3RvcElmTmVjZXNzYXJ5VGltZXI6OlN0b3BJZk5lY2Vzc2FyeVRpbWVy
KFZNKiB2bSkKLSAgICA6IEhlYXBUaW1lcih2bSkKKyAgICA6IEJhc2Uodm0pCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCmlu
ZGV4IGE2ODMxODQ3NDg5Yzg2YzM2YjY4OWUxOGRhMDQ4NjNhMWU0ZWU0NDUuLmZlYmY1MTZhZjU0
ODRiMGNiZDA4MDZkNGNjMzQ5ZDk3NDk3YmYyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaApAQCAtMjUsMTQgKzI1LDE1IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5jbHVkZSAiSlNSdW5M
b29wVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFN0
b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBTdG9wSWZOZWNl
c3NhcnlUaW1lciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU1J1bkxvb3BUaW1lciBCYXNlOwogICAgIGV4cGxpY2l0IFN0b3BJZk5lY2Vzc2FyeVRpbWVy
KFZNKik7CiAgICAgCiAgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWFl
MTUzMDg2MWJlNmIyNGM3YmVjZjI3MzMwMjJkYWMyYzQ2OGRlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCkBAIC0wLDAg
KzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCisK
KyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3
ZWVwZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgVVNFKENGKQorCitjb25zdCBDRlRp
bWVJbnRlcnZhbCBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUg
KiAxMDsKKworSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKzogbV92bSh2
bSkKKywgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQoreworICAgIHNldFJ1bkxvb3Aodm0tPmhl
YXAucnVuTG9vcCgpKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcChDRlJ1
bkxvb3BSZWYgcnVuTG9vcCkKK3sKKyAgICBpZiAobV9ydW5Mb29wKSB7CisgICAgICAgIENGUnVu
TG9vcFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9v
cENvbW1vbk1vZGVzKTsKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIu
Z2V0KCkpOworICAgICAgICBtX3J1bkxvb3AuY2xlYXIoKTsKKyAgICAgICAgbV90aW1lci5jbGVh
cigpOworICAgIH0KKworICAgIGlmIChydW5Mb29wKSB7CisgICAgICAgIG1fcnVuTG9vcCA9IHJ1
bkxvb3A7CisgICAgICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0KSk7CisgICAgICAgIG1fY29udGV4dC5pbmZvID0gdGhpczsKKyAgICAgICAgbV90
aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
c19kZWNhZGUsIHNfZGVjYWRlLCAwLCAwLCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlLCAm
bV9jb250ZXh0KSk7CisgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwg
bV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICB9Cit9CisKK0pTUnVu
TG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIHNldFJ1bkxvb3AoMCk7Cit9CisK
K3ZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9p
ZCogY29udGV4dFB0cikKK3sKKyAgICBKU1J1bkxvb3BUaW1lciogdGltZXIgPSBzdGF0aWNfY2Fz
dDxKU1J1bkxvb3BUaW1lcio+KGNvbnRleHRQdHIpOworICAgIHRpbWVyLT5tX2FwaUxvY2stPmxv
Y2soKTsKKworICAgIFJlZlB0cjxWTT4gdm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOworICAg
IGlmICghdm0pIHsKKyAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ug
c2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAgICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIodm0uZ2V0KCkpOworICAgICAgICB0aW1lci0+ZG9Xb3JrKCk7CisgICAgfQorCisgICAg
dGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNj
aGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQoreworICAgIENGUnVuTG9vcFRp
bWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVu
dCgpICsgaW50ZXJ2YWxJblNlY29uZHMpOworICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOworfQor
Cit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7CisgICAgQ0ZSdW5Mb29wVGlt
ZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50
KCkgKyBzX2RlY2FkZSk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorCisjZWxpZiBV
U0UoR0xJQikKKworY29uc3QgbG9uZyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYw
ICogMjQgKiAzNjUgKiAxMDsKKworc3RhdGljIEdTb3VyY2VGdW5jcyBKU1J1bkxvb3BUaW1lclNv
dXJjZUZ1bmN0aW9ucyA9IHsKKyAgICBudWxscHRyLCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwg
Ly8gY2hlY2sKKyAgICAvLyBkaXNwYXRjaAorICAgIFtdKEdTb3VyY2UqLCBHU291cmNlRnVuYyBj
YWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCisgICAgeworICAgICAgICBy
ZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxp
emUKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xv
c3VyZV9tYXJzaGFsbAorfTsKKworSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2
bSkKKzogbV92bSh2bSkKKywgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQorLCBtX3RpbWVyKGFk
b3B0R1JlZihnX3NvdXJjZV9uZXcoJkpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25zLCBzaXpl
b2YoR1NvdXJjZSkpKSkKK3sKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdldCgpLCAi
W0phdmFTY3JpcHRDb3JlXSBKU1J1bkxvb3BUaW1lciIpOworICAgIGdfc291cmNlX3NldF9jYWxs
YmFjayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewor
ICAgICAgICBhdXRvJiBydW5Mb29wVGltZXIgPSAqc3RhdGljX2Nhc3Q8SlNSdW5Mb29wVGltZXIq
Pih1c2VyRGF0YSk7CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHJ1bkxvb3BUaW1l
ci5tX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSlNSdW5Mb29wVGltZXI6
OnNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBydW5Mb29wVGltZXIudGltZXJE
aWRGaXJlKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9LCB0aGlz
LCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19tYWluX2Nv
bnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworfQorCitKU1J1bkxvb3BUaW1lcjo6fkpTUnVu
TG9vcFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkpOworfQor
Cit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoKQoreworICAgIG1fYXBpTG9jay0+
bG9jaygpOworCisgICAgaWYgKCFtX2FwaUxvY2stPnZtKCkpIHsKKyAgICAgICAgLy8gVGhlIFZN
IGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAgICAgICAg
bV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsKKyAgICAgICAgZG9Xb3JrKCk7CisgICAg
fQorCisgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6
c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgZ19zb3VyY2Vf
c2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSArIGlu
dGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVsZWQgPSB0
cnVlOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7CisgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVsZWQgPSBmYWxz
ZTsKK30KKyNlbHNlCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorOiBt
X3ZtKHZtKQoreworfQorCitKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKCkKK3sKK30K
Kwordm9pZCBKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSgpCit7Cit9CisKK3ZvaWQgSlNSdW5M
b29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlKQoreworfQorCit2b2lkIEpTUnVuTG9vcFRp
bWVyOjpjYW5jZWxUaW1lcigpCit7Cit9CisjZW5kaWYKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGlt
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODNlY2I5Y2JjNDNiODBkMzFlZjhiNmIwNDljMTdlZjVhYzRmY2I4YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVy
LmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3Vu
ZGF0aW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPHd0Zi9nbGliL0dS
ZWZQdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNMb2NrOworY2xh
c3MgVk07CisKK2NsYXNzIEpTUnVuTG9vcFRpbWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEpTUnVuTG9vcFRpbWVyPiB7CitwdWJsaWM6CisgICAgSlNSdW5Mb29wVGltZXIoVk0qKTsK
KyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIHZvaWQgdGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKik7CisjZW5kaWYKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpT
UnVuTG9vcFRpbWVyKCk7CisgICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKKworICAgIHZv
aWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOworICAgIHZvaWQgY2Fu
Y2VsVGltZXIoKTsKKyAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1Nj
aGVkdWxlZDsgfQorCisjaWYgVVNFKENGKQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
UnVuTG9vcChDRlJ1bkxvb3BSZWYpOworI2VuZGlmIC8vIFVTRShDRikKKworcHJvdGVjdGVkOgor
ICAgIFZNKiBtX3ZtOworCisgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOworICAgIGJvb2wg
bV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07CisjaWYgVVNFKENGKQorICAgIHN0YXRpYyBjb25zdCBD
RlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKKworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJl
Zj4gbV90aW1lcjsKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3J1bkxvb3A7CisKKyAg
ICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OworCisgICAgTG9jayBtX3NodXRkb3du
TXV0ZXg7CisjZWxpZiBVU0UoR0xJQikKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBzX2RlY2FkZTsK
KyAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOworICAgIEdSZWZQdHI8R1NvdXJjZT4gbV90aW1lcjsK
KyNlbmRpZgorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKK307CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDJlNjUwYzJhNmI1
ZTg1NzZjNDRmOTZjYTc1YWE2NzU3ZTRlNGEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCkBAIC0wLDAgKzEs
OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKKworI2lu
Y2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitQcm9taXNlRGVmZXJyZWRUaW1lcjo6UHJvbWlzZURlZmVycmVkVGltZXIoVk0mIHZtKQor
ICAgIDogQmFzZSgmdm0pCit7Cit9CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29y
aygpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7CisgICAgY2FuY2VsVGlt
ZXIoKTsKKyAgICB3aGlsZSAoIW1fdGFza3MuaXNFbXB0eSgpKSB7CisgICAgICAgIFRpY2tldCB0
aWNrZXQ7CisgICAgICAgIFRhc2sgdGFzazsKKyAgICAgICAgc3RkOjp0aWUodGlja2V0LCB0YXNr
KSA9IG1fdGFza3MudGFrZUxhc3QoKTsKKworICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbHJlYWR5
IGNhbmNlbGVkIHRoZXNlIHByb21pc2VzLgorICAgICAgICBhdXRvIHByb21pc2UgPSBtX3BlbmRp
bmdQcm9taXNlcy5maW5kKHRpY2tldCk7CisgICAgICAgIGlmIChwcm9taXNlICE9IG1fcGVuZGlu
Z1Byb21pc2VzLmVuZCgpKSB7CisgICAgICAgICAgICB0YXNrKCk7CisgICAgICAgICAgICBtX3Bl
bmRpbmdQcm9taXNlcy5yZW1vdmUocHJvbWlzZSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IHdhaXRpbmdUYXNrcyA9IG1fYmxvY2tlZFRhc2tzLnRha2UodGlja2V0KTsKKyAgICAgICAgZm9y
IChjb25zdCBUYXNrJiB0YXNrIDogd2FpdGluZ1Rhc2tzKQorICAgICAgICAgICAgdGFzaygpOwor
ICAgIH0KK30KKworUHJvbWlzZURlZmVycmVkVGltZXI6OlRpY2tldCBQcm9taXNlRGVmZXJyZWRU
aW1lcjo6YWRkUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIHN0ZDo6
dW5pcXVlX3B0cjxNYXJrZWRBcmd1bWVudEJ1ZmZlcj4mJiBkZXBlbmRhbmNpZXMpCit7CisgICAg
QVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFRpY2tl
dCB0aWNrZXQgPSBuZXh0VGlja2V0KCk7CisgICAgYXV0byByZXN1bHQgPSBtX3BlbmRpbmdQcm9t
aXNlcy5hZGQodGlja2V0LCBzdGQ6Om1ha2VfdHVwbGUocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRh
bmNpZXMpKSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICByZXR1cm4gdGlja2V0OworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5j
ZWxQZW5kaW5nUHJvbWlzZShUaWNrZXQgdGlja2V0KQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGlu
Z1Byb21pc2VzLnJlbW92ZSh0aWNrZXQpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQpOworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKFRp
Y2tldCB0aWNrZXQsIFRhc2smJiB0YXNrKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGFz
a0xvY2spOworICAgIG1fdGFza3MuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZSh0aWNrZXQsIFdURk1v
dmUodGFzaykpKTsKKyAgICBpZiAoIWlzU2NoZWR1bGVkKCkpCisgICAgICAgIHNjaGVkdWxlVGlt
ZXIoMCk7Cit9CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVkdWxlQmxvY2tlZFRh
c2soVGlja2V0IGJsb2NraW5nVGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBBU1NFUlQobV92
bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2Jsb2NrZWRUYXNrcy5hZGQoYmxvY2tpbmdUaWNrZXQsIFZlY3RvcjxUYXNrPigpKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9taXNlRGVmZXJyZWRUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
bWlzZURlZmVycmVkVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWM5ZmE2ZDg0ODU4MjZhZDFhZDA0YzQz
NTY3NjU0NWZlM2EzN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1Byb21pc2VE
ZWZlcnJlZDsKK2NsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworY2xhc3MgVk07CisKKworY2xh
c3MgUHJvbWlzZURlZmVycmVkVGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNSdW5Mb29wVGltZXIgQmFzZTsKKworICAgIFByb21pc2VEZWZlcnJl
ZFRpbWVyKFZNJik7CisKKyAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOworCisgICAgdHlwZWRl
ZiB1aW50MzJfdCBUaWNrZXQ7CisgICAgVGlja2V0IGFkZFBlbmRpbmdQcm9taXNlKEpTUHJvbWlz
ZURlZmVycmVkKiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFyZ3VtZW50QnVmZmVyPiYmIGRlcGVu
ZGFuY2llcyk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nUHJvbWlzZShUaWNrZXQpOworCisgICAg
dHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gVGFzazsKKyAgICB2b2lkIHNjaGVkdWxlV29y
a1Nvb24oVGlja2V0LCBUYXNrJiYpOworCisgICAgLy8gQmxvY2tlZCB0YXNrcyBzaG91bGQgb25s
eSBiZSByZWdpc3RlcmVkIHdoaWxlIGhvbGRpbmcgdGhlIEpTIEFQSSBsb2NrLiBJZiB3ZSBkaWRu
J3QgcmVxdWlyZSBob2xkaW5nIHRoZQorICAgIC8vIEpTIEFQSSBsb2NrIHRoZW4gdGhlcmUgbWln
aHQgYmUgYSByYWNlIHdoZXJlIHRoZSBUaWNrZXQgeW91IGFyZSB3YWl0aW5nIG9uIGlzIHJ1biBi
ZWZvcmUgeW91ciB0YXNrIGlzCisgICAgLy8gcmVnaXN0ZXJlZC4KKyAgICAvLyBOb3RlOiBCbG9j
a2VkIHRhc2tzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIGxpc3QgYWZ0ZXIgYmVp
bmcgcnVuLCBzbyB5b3UnbGwgbmVlZCB0byBkbyB0aGF0IHlvdXJzZWxmLgorICAgIHZvaWQgc2No
ZWR1bGVCbG9ja2VkVGFzayhUaWNrZXQgYmxvY2tpbmdUaWNrZXQsIFRhc2smJik7CisKK3ByaXZh
dGU6CisgICAgVGlja2V0IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2N1cnJlbnRUaWNrZXQrKzsg
fQorCisgICAgLy8gbV9wZW5kaW5nUHJvbWlzZXMgc2hvdWxkIG9ubHkgYmUgbW9kaWZpZWQgaWYg
eW91IGFyZSBob2xkaW5nIHRoZSBKUyBBUEkgbG9jay4KKyAgICBIYXNoTWFwPFRpY2tldCwgc3Rk
Ojp0dXBsZTxKU1Byb21pc2VEZWZlcnJlZCosIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRBcmd1bWVu
dEJ1ZmZlcj4+PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBUaWNrZXQgbV9jdXJyZW50VGlja2V0
IHsgMCB9OworICAgIExvY2sgbV90YXNrTG9jazsKKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxUaWNr
ZXQsIFRhc2s+PiBtX3Rhc2tzOworICAgIEhhc2hNYXA8VGlja2V0LCBWZWN0b3I8VGFzaz4+IG1f
YmxvY2tlZFRhc2tzOyAvLyBUaWNrZXQgaXMgdGhlIHRpY2tldCBvZiB0aGUgcHJvbWlzZSB0aGlz
IHRhc2sgaXMgd2FpdGluZyBmb3IuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAwNjRkYjIwNjI2MzljZmYyNjk5ZGVmMzE0MDJm
YTc3NWI3ZmZhNzQwLi43ZjQyYTAwNzc0M2Y0YmMzOTQ3YWNhMDZmOWRlNmMxMWRiMDg5YWM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5j
bHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUg
IlByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKQEAgLTEwMyw2ICsxMDQsNyBAQAogI2luY2x1
ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3BlLmgiCiAjaW5j
bHVkZSAiVk1JbnNwZWN0b3IuaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRl
ICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJX
ZWFrTWFwRGF0YS5oIgpAQCAtMTc4LDYgKzE4MCw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIHRvcFZNRW50cnlGcmFtZShudWxscHRyKQogICAgICwg
dG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9DYWxsZXIoKSkKICAgICAsIHRvcEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShudWxscHRyKQorICAgICwgd2FzbVdvcmtsaXN0KHN0ZDo6bWFrZV91bmlxdWU8
V2FzbTo6V29ya2xpc3Q+KCp0aGlzKSkKKyAgICAsIHByb21pc2VEZWZlcnJlZFRpbWVyKHN0ZDo6
bWFrZV91bmlxdWU8UHJvbWlzZURlZmVycmVkVGltZXI+KCp0aGlzKSkKICAgICAsIG1fYXRvbWlj
U3RyaW5nVGFibGUodm1UeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3Ry
aW5nVGFibGUoKSA6IG5ldyBBdG9taWNTdHJpbmdUYWJsZSkKICAgICAsIHByb3BlcnR5TmFtZXMo
bnVsbHB0cikKICAgICAsIGVtcHR5TGlzdChuZXcgQXJnTGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCmluZGV4IDE0NDA4NmQ5NzQwMTk3MGJhZTYxYzIxZGYzN2U3YzFmZTdiZjU2ZmUu
LmI1ZmZjZTBjMTA4ZjhhOGNiNDk0NmI0OWQ1NzNmMTllN2M4YWIxNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaApAQCAtMTA2LDYgKzEwNiw3IEBAIGNsYXNzIEpTT2JqZWN0OwogY2xh
c3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKK2NsYXNzIFByb21pc2VEZWZlcnJlZFRpbWVyOwogY2xh
c3MgUmVnRXhwQ2FjaGU7CiBjbGFzcyBSZWdpc3RlcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0OwpAQCAtMTU2LDYgKzE1Nyw3IEBAIGNsYXNzIFNpZ25hdHVyZTsKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBTaWduYXR1cmVJbmZvcm1hdGlvbjsK
K2NsYXNzIFdvcmtsaXN0OwogfQogI2VuZGlmCiAKQEAgLTM3OCw3ICszODAsOSBAQCBwdWJsaWM6
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHN0ZDo6b25jZV9mbGFnIG1fd2FzbVNpZ25h
dHVyZUluZm9ybWF0aW9uT25jZUZsYWc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uPiBtX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6V29ya2xpc3Q+IHdhc21Xb3JrbGlzdDsKICNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxQcm9taXNlRGVmZXJyZWRUaW1lcj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAg
ICAgCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwogICAg
IGNvbnN0IENsYXNzSW5mbyogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENsYXNz
SW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1i
bHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKaW5k
ZXggZmNkYzhjZGRjNGRhNjhkZDlkY2UxOTkwZDlkOTkxMmVkZDI5ZDY2OC4uYWM2YzkwOGFlMGQ2
OTk5MzJhZmMxOGI4ZGZiNGQwMmU3ZTQzMWJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXZWJBc3NlbWJseS5jcHAKQEAgLTMzLDEwICszMywxNiBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJX
YXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuaCIKIAordXNpbmcgSlNDOjpXYXNtOjpQbGFuOworCiBuYW1l
c3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpT
V2ViQXNzZW1ibHkpOwpAQCAtNDUsMjcgKzUxLDEzNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSopOwogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVj
U3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMs
IENhdGNoU2NvcGUmIGNhdGNoU2NvcGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlKQorewor
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICBB
U1NFUlQoZXhjZXB0aW9uKTsKKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
cHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyB0cnVseSBh
c3luY2hyb25vdXM6Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjAxNgotICAgIEpTVmFsdWUgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIGlmIChF
eGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
Y2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhl
YywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
cm9taXNlLT5wcm9taXNlKCkpOwotICAgIH0KKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJj
ZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBwcm9taXNl
LT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyPiBkZXBlbmRhbmNpZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtlZEFyZ3VtZW50
QnVmZmVyPigpOworICAgIGRlcGVuZGFuY2llcy0+YXBwZW5kKHByb21pc2UpOworICAgIGF1dG8g
dGlja2V0ID0gdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21p
c2UsIFdURk1vdmUoZGVwZW5kYW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0
UmVmKCpuZXcgUGxhbih2bSwgc291cmNlLCBQbGFuOjpWYWxpZGlhdGlvbiwgWyZ2bSwgc291cmNl
LCB0aWNrZXQsIHByb21pc2VdIChQbGFuJiBwKSB7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0g
bWFrZVJlZihwKTsKKyAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29y
a1Nvb24odGlja2V0LCBbJnZtLCBzb3VyY2UsIHByb21pc2UsIHBsYW4gPSBXVEZNb3ZlKHBsYW4p
XSAoKSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisgICAgICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBwcm9taXNlLT5zdHJ1Y3R1cmUoKS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxlID0gSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseU1vZHVs
ZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOworICAgICAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgc2NvcGUsIHByb21pc2UpOworCisgICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4
ZWMsIG1vZHVsZSk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIHZtLndhc21Xb3JrbGlz
dC0+ZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHBy
b21pc2UtPnByb21pc2UoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBib29sIGZpcnN0QXJndW1l
bnRJc01vZHVsZSkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1
bGUuIFdlIGZpcnN0IGFsbG9jYXRlIGl0cyBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGlu
Zm9ybWF0aW9uIHByaW9yIHRvCisgICAgLy8gZ2VuZXJhdGluZyBhbnkgY29kZS4gSWYgd2UgZGlk
bid0IGRvIHRoaXMgd2UgbWlnaHQgY2hvb3NlIHRvIGNvbXBpbGUgd2l0aCBTaWduYWxpbmcgbWVt
b3J5IGJ1dCBhY3R1YWxseSBnZXQgYSBCb251ZHMgQ2hlY2tpbmcKKyAgICAvLyBtZW1vcnkgdGhl
biBoYXZlIHRvIHJlY29tcGlsZS4KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
ID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoZXhlYywgbW9kdWxlLCBpbXBvcnRPYmpl
Y3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICByZWplY3QoZXhlYywg
c2NvcGUsIHByb21pc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlcmUg
YXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5
IGhhcyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2ssIHNvIHdlIGhhdmUgbm8gbW9yZSB3b3JrIHRv
IGRvLgorICAgIC8vIDIpIFRoZSBpbnN0YW5jZSBoYXMgbm8gQ29kZUJsb2NrLCBzbyB3ZSBuZWVk
IHRvIG1ha2Ugb25lIGFuZCBjb21waWxlIHRoZSBjb2RlIGZvciBpdC4KKyAgICAvLyAzKSBUaGUg
aW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gdW5pbml0aWFsaXplZCBDb2RlQmxvY2ssIHNvIHNvbWVv
bmUgZWxzZSBpcyBjb21waWxpbmcgY29kZSBhbmQgd2UganVzdCBuZWVkIHRvIHdhaXQgZm9yIHRo
ZW0uCisKKyAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKSB7CisgICAgICAgIGlmIChmaXJz
dEFyZ3VtZW50SXNNb2R1bGUpCisgICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGlu
c3RhbmNlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikp
LCBtb2R1bGUpOworICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5jZSk7Cisg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQXJndW1lbnRCdWZmZXI+IGRlcGVuZGFu
Y2llcyA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2VkQXJndW1lbnRCdWZmZXI+KCk7CisgICAgZGVw
ZW5kYW5jaWVzLT5hcHBlbmQocHJvbWlzZSk7CisgICAgZGVwZW5kYW5jaWVzLT5hcHBlbmQoaW5z
dGFuY2UpOworICAgIGRlcGVuZGFuY2llcy0+YXBwZW5kKG1vZHVsZSk7CisgICAgYXV0byB0aWNr
ZXQgPSB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwg
V1RGTW92ZShkZXBlbmRhbmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgpLCBQbGFuOjpGdWxsQ29tcGlsZSwgWyZ2bSwg
dGlja2V0LCBwcm9taXNlLCBpbnN0YW5jZSwgZmlyc3RBcmd1bWVudElzTW9kdWxlXSAoUGxhbiYg
cCkgeworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHZtLnBy
b21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgWyZ2bSwgcHJvbWlz
ZSwgaW5zdGFuY2UsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pLCBmaXJzdEFyZ3VtZW50SXNNb2R1bGVd
ICgpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb21pc2UtPnN0cnVjdHVyZSgpLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgaW5zdGFuY2UtPmFkZENvZGVC
bG9ja0Zyb21QbGFuKGV4ZWMsIHBsYW4pOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChm
aXJzdEFyZ3VtZW50SXNNb2R1bGUpCisgICAgICAgICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShl
eGVjLCBpbnN0YW5jZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU09i
amVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJ
SUxpdGVyYWwoIm1vZHVsZSIpKSwgaW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJ
TGl0ZXJhbCgiaW5zdGFuY2UiKSksIGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBwcm9taXNl
LT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH0pKTsKKworICAgIGlmIChpbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpKQorICAgICAgICBw
bGFuLT5zZXRNZW1vcnkobWFrZVJlZihpbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpKSk7CisK
KyAgICB2bS53YXNtV29ya2xpc3QtPmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0
T2JqZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1
ZSh2bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFyZ3VtZW50QnVmZmVyPiBkZXBlbmRhbmNpZXMg
PSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtlZEFyZ3VtZW50QnVmZmVyPigpOworICAgIGRlcGVuZGFu
Y2llcy0+YXBwZW5kKHByb21pc2UpOworICAgIGRlcGVuZGFuY2llcy0+YXBwZW5kKGltcG9ydE9i
amVjdCk7CisgICAgYXV0byB0aWNrZXQgPSB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVu
ZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRhbmNpZXMpKTsKKworICAgIFJlZjxQ
bGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBzb3VyY2UsIFBsYW46OlZhbGlkaWF0
aW9uLCBbJnZtLCBzb3VyY2UsIHRpY2tldCwgcHJvbWlzZSwgaW1wb3J0T2JqZWN0XSAoUGxhbiYg
cCkgeworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHZtLnBy
b21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgWyZ2bSwgc291cmNl
LCBwcm9taXNlLCBpbXBvcnRPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSB7CisgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm9taXNlLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9
IFdlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVNb2R1bGVTdHViKGV4ZWMsIHBsYW4pOworICAgICAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4
ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUs
IGltcG9ydE9iamVjdCk7CisgICAgICAgIH0pOworICAgIH0pKTsKK30KKwogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTc2LDE0ICsxOTIsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNT
dGF0ZSogZXhlYykKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAg
YXV0byByZWplY3QgPSBbJl0gKCkgewotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNh
dGNoU2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOwotICAgICAg
ICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChl
eGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfTsKLQogICAgIEpTVmFsdWUgaW1wb3J0QXJndW1l
bnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0gaW1w
b3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVm
aW5lZCgpICYmICFpbXBvcnRPYmplY3QpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pT
V2ViQXNzZW1ibHkuaAppbmRleCAxMzNlZjgxOGY4ZTA3NjNkNzkxMDkxYjZjYzliZmRhYmY0MWY5
NTk0Li42ZjUzYmUxYmVjODBjMWEyM2VkNTc3OWU5NDBmZjNhMWU1YTU5NmUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCkBAIC0yOCwzMiArMjgsNiBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVk
ZSAianMvSlNXZWJBc3NlbWJseUNhbGxlZS5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlD
b21waWxlRXJyb3IuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNp
bmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJB
c3NlbWJseU1lbW9yeS5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNp
bmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNX
ZWJBc3NlbWJseVRhYmxlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90
eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCi0jaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1
bGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgot
I2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
UnVudGltZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgot
I2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCmluZGV4IDQ1ZDBjZDk3NTVhYTRlZjI1NTdjYjJhYmNkNTliYjRhODA0NmE2OTMuLmFl
Yjc0M2Q0MGVmNGE3Njg5MTkwODAwMmIwZTgzM2MzNGZjMGFmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
YWxsZWUuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSA8d3RmL0JhZy5oPgpAQCAtMzksMTQgKzQwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
SlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKK25hbWVz
cGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFn
PENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVi
cz4mJiBleGl0U3R1YnMsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVD
b3VudCkKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwg
SlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCBQcm9t
aXNlRGVmZXJyZWRUaW1lcjo6VGlja2V0IHRpY2tldCwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAg
ICAgewotICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3Vu
dCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpmb3J3YXJkPEJhZzxD
YWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpX
YXNtRXhpdFN0dWJzPj4oZXhpdFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOworICAgICAgICBh
dXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKHZtLCBvd25lciwgbW9kZSwgdGlja2V0LCBjYWxsZWVDb3VudCk7CiAgICAg
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KQEAgLTU2LDYgKzYxLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZShW
TSYgdm0sIFdhc206OlBsYW4mKTsKKwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQo
KSBjb25zdCB7IHJldHVybiBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CiAgICAgV2FzbTo6TWVt
b3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQpAQCAt
MTAxLDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZv
PiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1
bnNpZ25lZCBjYWxsZWVDb3VudCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpT
V2ViQXNzZW1ibHlNb2R1bGUqLCBXYXNtOjpNZW1vcnk6Ok1vZGUsIFByb21pc2VEZWZlcnJlZFRp
bWVyOjpUaWNrZXQgdGlja2V0LCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7CiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpAQCAtMTI1LDcgKzEzMiwxMCBA
QCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmlu
YWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOworICAgIGJvb2wgbV9pbml0
aWFsaXplZCB7IGZhbHNlIH07CiAgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1fbW9kZTsKKyAgICAv
LyBUaGUgdGlja2V0IHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbiB0aGlzIGNvZGUg
YmxvY2suCisgICAgUHJvbWlzZURlZmVycmVkVGltZXI6OlRpY2tldCBtX3RpY2tldDsKICAgICB1
bnNpZ25lZCBtX2NhbGxlZUNvdW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA1YTlhNzdhODdjZGY1YzE1ZGFm
MjcxODZhYWNlNTMxZmZkYWQyNmRmLi5iODgyMWU3NTgyNWYzNDA3ZWEwOTVmMjJkMWMzMjM3NmQ4
NzQ1YmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uaApAQCAtNTQsMjIgKzU0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiwg
Ym9vbCBpc0ltcG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpOwogCiAgICAgUGFnZUNvdW50
IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4
aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIGJvb2wgaGFzUmVzZXJ2ZWRN
ZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5OyB9Ci0gICAgUmVmUHRyPE1l
bW9yeT4gdGFrZVJlc2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1vcnkoKSk7
IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5LnJlbGVhc2UoKTsgfQotICAgIE1lbW9yeTo6TW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxNZW1v
cnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7IH07CiAgICAg
UGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5OjpNb2RlIG1fbW9kZSB7IE1lbW9y
eTo6TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IDFhOGQz
ZGNlZTYyZDU4NjA5NTFlODZlMGE1NTBmODAyOTU0MGFlMjMuLmNmYjdjNWFhMzE5ZDlhNzU2MGIx
OTcwNTMzMGM4OWIxNWRmY2UyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgpAQCAtNTAsMzAgKzQ5LDQ1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi1QbGFu
OjpQbGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBsYW4odm0sIHNv
dXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCkpCisKK1BsYW46OlBsYW4oVk0mIHZtLCBSZWZQdHI8
QXJyYXlCdWZmZXI+JiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCisgICAgOiBQbGFuKHZtLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2UtPmRh
dGEoKSksIHNvdXJjZS0+Ynl0ZUxlbmd0aCgpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQoreworfQor
CitQbGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCks
IHNvdXJjZS5zaXplKCksIHdvcmssIFdURk1vdmUodGFzaykpCiB7CiB9CiAKLVBsYW46OlBsYW4o
Vk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCitQbGFu
OjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3Ro
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDogbV92bSh2bSkK
KyAgICAsIG1fY29tcGxldGlvblRhc2sodGFzaykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAg
ICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmsp
Cit7Cit9CisKK3ZvaWQgUGxhbjo6ZmFpbChTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCiB7CisgICAg
bV9lcnJvck1lc3NhZ2UgPSBXVEZNb3ZlKGVycm9yTWVzc2FnZSk7CisgICAgbW92ZVRvU3RhdGUo
U3RhdGU6OkZhaWxlZCk7CisgICAgbV9jb21wbGV0aW9uVGFzaygqdGhpcyk7CiB9CiAKIGJvb2wg
UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4g
cmVjb21waWxlTW9kZSkKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6SW5pdGlhbCk7
CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9u
czo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOwogCiAgICAgewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1f
dm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgcmVjb21waWxlTW9kZSk7CisgICAgICAgIE1v
ZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoJm1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwg
cmVjb21waWxlTW9kZSk7CiAgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIu
cGFyc2UoKTsKICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewotICAgICAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBwYXJzZVJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAgZmFpbChXVEZNb3Zl
KHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+
bW9kdWxlKTsKQEAgLTg4LDM2ICsxMDIsMzUgQEAgYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRl
TW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQogICAgICAg
ICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5j
dGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4
XS5zdGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3Ro
KTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsK
LSAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBz
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRl
eCk7CiAKLSAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbiht
X3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJ
bmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5k
aWNlcyk7CisgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24o
Jm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVs
ZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJ
bmRpY2VzKTsKICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
dW5jdGlvbkxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50
ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGlu
IGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8g
RklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgZmFpbChtYWtlU3RyaW5n
KHZhbGlkYXRpb25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3Ry
aW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVj
dGVkLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIGRh
dGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pY3Jv
c2Vjb25kcygpLCAiIHVzIHRvIHZhbGlkYXRlIG1vZHVsZSIpOworICAgIG1vdmVUb1N0YXRlKFN0
YXRlOjpWYWxpZGF0ZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBXZSBhcmUgY3JlYXRp
bmcgYSBidW5jaCBvZiB0aHJlYWRzIHRoYXQgdG91Y2ggdGhlIG1haW4gdGhyZWFkJ3Mgc3RhY2su
IFRoaXMgd2lsbCBtYWtlIEFTQU4gdW5oYXBweS4KLS8vIFRoZSByZWFzb24gdGhpcyBpcyBPSyBp
cyB0aGF0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVl
IHVudGlsIGFsbCB0aHJlYWRzCi0vLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUgZG9u
ZSBleGVjdXRpbmcuCi1TVVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25h
bDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUoc3RkOjpv
cHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CisgICAgQVNTRVJUKG1fc3Rh
dGUgPT0gU3RhdGU6OkluaXRpYWwpOwogICAgIGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShy
ZWNvbXBpbGVNb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVHJhY2VTY29wZSB0cmFjZVNj
b3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJseUNvbXBpbGVFbmQpOwogCisg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlZhbGlkYXRlZCk7CiAgICAgaWYgKHJlY29tcGls
ZU1vZGUpCiAgICAgICAgIEFTU0VSVChtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgp
ID09IHJlY29tcGlsZU1vZGUpOwogCkBAIC0xMjcsNyArMTQwLDcgQEAgdm9pZCBQbGFuOjpydW4o
c3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIkZhaWxlZCBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3Ig
Iik7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzaXplKTsKICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKHdoYXQpOwotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBidWls
ZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBmYWlsKGJ1aWxkZXIudG9TdHJpbmcoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xNTEsMTI1ICsxNjQsMTExIEBAIHZvaWQgUGxhbjo6cnVuKHN0ZDo6b3B0aW9uYWw8TWVt
b3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVyICIsIGltcG9y
dEZ1bmN0aW9uSW5kZXgsICI6ICIsIGltcG9ydC0+bW9kdWxlLCAiOiAiLCBpbXBvcnQtPmZpZWxk
KTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0LT5raW5kSW5k
ZXgpOwotICAgICAgICBtX3dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGV4aXRTdHViR2Vu
ZXJhdG9yKG1fdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEZ1bmN0
aW9uSW5kZXgpKTsKKyAgICAgICAgbV93YXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZChleGl0
U3R1YkdlbmVyYXRvcigmbV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1w
b3J0RnVuY3Rpb25JbmRleCkpOwogICAgIH0KIAotICAgIG1fY3VycmVudEluZGV4ID0gMDsKKyAg
ICBtb3ZlVG9TdGF0ZShTdGF0ZTo6UHJlcGFyZWQpOworfQogCi0gICAgYXV0byBkb1dvcmsgPSBb
dGhpc10gewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgdWludDMyX3QgZnVu
Y3Rpb25JbmRleDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXggPSBtX2N1cnJlbnRJbmRleDsK
LSAgICAgICAgICAgICAgICArK21fY3VycmVudEluZGV4OwotICAgICAgICAgICAgfQorLy8gV2Ug
ZG9uJ3QgaGF2ZSBhIHNlbWFwaG9yZSBjbGFzcy4uLiBhbmQgdGhpcyBkb2VzIGtpbmRhIGludGVy
ZXN0aW5nIHRoaW5ncy4KK2NsYXNzIFBsYW46OlRocmVhZENvdW50SG9sZGVyIHsKK3B1YmxpYzoK
KyAgICBUaHJlYWRDb3VudEhvbGRlcihQbGFuJiBwbGFuKQorICAgICAgICA6IG1fcGxhbihwbGFu
KQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9jayk7CisgICAg
ICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcysrOworICAgIH0KIAotICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgICAgICBzaXplX3Qg
ZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4
XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBtX3NvdXJjZUxlbmd0aCk7Ci0g
ICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwot
ICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlv
bkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIEFTU0VSVCh2YWxp
ZGF0ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1
ZWRTaWduYXR1cmVJbmRpY2VzKSk7Ci0KLSAgICAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsK
LSAgICAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KCptX3ZtLCBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3Rh
cnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNb
ZnVuY3Rpb25JbmRleF0sICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUlu
ZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKLQotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3Nh
Z2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFp
bCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KLSAgICAg
ICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJl
cihmdW5jdGlvbkluZGV4KSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBtX2Z1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgflRocmVhZENvdW50SG9sZGVyKCkKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xvY2spOworICAgICAgICBtX3Bs
YW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKIAotICAgICAgICAgICAgICAgIC8vIFdlIHdp
bGwgdGVybWluYXRlIG9uIHRoZSBuZXh0IGV4ZWN1dGlvbi4KLSAgICAgICAgICAgICAgICBjb250
aW51ZTsgCi0gICAgICAgICAgICB9CisgICAgICAgIGlmICghbV9wbGFuLm1fbnVtYmVyT2ZBY3Rp
dmVUaHJlYWRzKQorICAgICAgICAgICAgbV9wbGFuLmNvbXBsZXRlKGxvY2tlcik7CisgICAgfQog
Ci0gICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdU
Rk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OworICAgIFBs
YW4mIG1fcGxhbjsKK307CiAKLSAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZTsKLSAgICBpZiAo
dmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKLSAgICAgICAgc3RhcnRU
aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit2b2lkIFBsYW46OmNvbXBpbGVGdW5jdGlvbnMo
KQoreworICAgIEFTU0VSVChtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZCk7CisgICAgaWYgKG1f
c3RhdGUgPj0gU3RhdGU6OkNvbXBpbGVkKQorICAgICAgICByZXR1cm47CiAKLSAgICB1aW50MzJf
dCB0aHJlYWRDb3VudCA9IE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSA/IFdURjo6bnVtYmVy
T2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAgICB1aW50MzJfdCBudW1Xb3JrZXJUaHJlYWRzID0g
dGhyZWFkQ291bnQgLSAxOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwot
ICAgIHRocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bVdvcmtlclRocmVhZHMpOwotICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1Xb3JrZXJUaHJlYWRzOyBpKyspCi0gICAgICAgIHRocmVh
ZHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZVRocmVhZCgianNjLndhc20tYjMtY29tcGlsYXRpb24u
dGhyZWFkIiwgZG9Xb3JrKSk7CisgICAgVGhyZWFkQ291bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZ1bmN0aW9uSW5k
ZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpKQorICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21waWxlZCk7Cisg
ICAgICAgIH0KIAotICAgIGRvV29yaygpOyAvLyBMZXQgdGhlIG1haW4gdGhyZWFkIGRvIHNvbWUg
d29yayB0b28uCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJj
ZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAg
ICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtm
dW5jdGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbklu
ZGV4XS5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVu
Z3RoKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4Owor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlv
bigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9k
dWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVy
ZUluZGljZXMpKTsKKworICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CisgICAgICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fdm0sIG1fY29tcGlsYXRp
b25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1f
bW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25h
dHVyZUluZGljZXMpOworCisgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgeworICAgICAgICAgICAgICAgIC8vIE11bHRp
cGxlIGNvbXBpbGVzIGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNo
b29zZSB0aGUgZmlyc3QuCisgICAgICAgICAgICAgICAgZmFpbChtYWtlU3RyaW5nKHBhcnNlQW5k
Q29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6
Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQu
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAgICAgIG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21w
aWxlUmVzdWx0KTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBm
dW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAgewotICAgICAgICAgICAgQ29tcGlsYXRpb25Db250
ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAg
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAg
ICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwordm9pZCBQbGFuOjpj
b21wbGV0ZShjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50SW5kZXgg
Pj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIWhhc1dv
cmsoKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCAqY29udGV4
dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0KKyAgICAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBp
bGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICAgICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICBTdHJp
bmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3Zt
LCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV92bSwgKmNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQog
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1v
dmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7
Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNFbnRyeXBvaW50VG9X
YXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxw
dHIpOworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5
cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIobV93YXNtSW50ZXJuYWxGdW5j
dGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogCi0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5k
ZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQogICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rp
b25JbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShj
b250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25z
OjpyZXBvcnRDb21waWxlVGltZXMoKSkgewotICAgICAgICBkYXRhTG9nTG4oIlRvb2sgIiwgKE1v
bm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNyb3NlY29uZHMoKSwKLSAgICAgICAg
ICAgICIgdXMgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgbW9kdWxlIik7Ci0gICAgfQotCi0gICAg
Ly8gUGF0Y2ggdGhlIGNhbGwgc2l0ZXMgZm9yIGVhY2ggV2ViQXNzZW1ibHkgZnVuY3Rpb24uCi0g
ICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsKLSAgICAgICAgICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzOwotICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlz
SW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4
KSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxp
bmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25k
aXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAgICAgICBleGVj
dXRhYmxlQWRkcmVzcyA9IGNhbGwudGFyZ2V0ID09IFVubGlua2VkV2FzbVRvV2FzbUNhbGw6OlRh
cmdldDo6VG9KcwotICAgICAgICAgICAgICAgICAgICA/IG1fd2FzbUV4aXRTdHVicy5hdChjYWxs
LmZ1bmN0aW9uSW5kZXgpLndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpCi0gICAg
ICAgICAgICAgICAgICAgIDogbV93YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCku
d2FzbVRvV2FzbS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVubGlua2VkV2FzbVRv
V2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJl
c3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXggLSBtX3dh
c21FeGl0U3R1YnMuc2l6ZSgpKS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChl
eGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9mYWlsZWQgPSBm
YWxzZTsKLX0KLQotdm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlD
YWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+IGNhbGxiYWNrKQotewotICAgIEFTU0VSVCgh
ZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsg
aW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyAr
K2ludGVybmFsRnVuY3Rpb25JbmRleCkgewotICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhd
LmdldCgpOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxl
ZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1v
dmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBq
c0VudHJ5cG9pbnRDYWxsZWUpOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21F
bnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKGdsb2JhbE9iamVj
dC0+dm0oKSwgV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0
aW9uLCB3YXNtRW50cnlwb2ludENhbGxlZSk7Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxG
dW5jdGlvbkluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsK
KyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgIG1vdmVUb1N0
YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAgICAgICBtX2NvbXBsZXRpb25UYXNrKCp0aGlzKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IGQwNzAz
NzUyMDMyYzlhYTBjZDg1ODQxN2ZiMTcyNmU3ZmI5YzNkZjkuLmRlN2M2YTk3ZmJjMjM3NTQ0MDk5
ZDU5NzA1NmMzNjBkZmEwYzUwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aApAQCAtNDMsMjQgKzQzLDIzIEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiAKIG5hbWVz
cGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFu
KFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwg
Y29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UGxhbiYpPiBDb21wbGV0aW9uVGFzazsKKyAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBG
dWxsQ29tcGlsZSwgVmFsaWRpYXRpb24gfTsKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBz
aG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdp
bGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgUGxhbihWTSYsIFJlZlB0cjxBcnJheUJ1ZmZl
cj4mLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFBsYW4oVk0mLCBWZWN0b3I8Y29uc3QgdWludDhfdD4sIEFzeW5jV29yaywgQ29tcGxldGlvblRh
c2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgflBsYW4oKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlv
bmFsPE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIGJvb2wgcGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oc3RkOjpvcHRp
b25hbDxNZW1vcnk6Ok1vZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHByZXBhcmUoKTsKKyAgICB2b2lkIGNvbXBpbGVGdW5jdGlvbnMoKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKik+KTsKLQotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkpOwotICAg
ICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJik7CiAK
ICAgICBWZWN0b3I8RXhwb3J0PiYgZXhwb3J0cygpIGNvbnN0CiAgICAgewpAQCAtNzEsNyArNzAs
NyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOworICAgICAgICByZXR1cm4gbV9mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxN
b2R1bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3JtYXRpb24oKQpAQCAtOTIsOSArOTEs
MzggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0U3R1YnMpOwog
ICAgIH0KIAotICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKTsgfQorICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFJlZlB0cjxN
ZW1vcnk+JiYgbWVtb3J5KSB7IEFTU0VSVCghaGFzTWVtb3J5KCkpOyBtX3Jlc2VydmVkTWVtb3J5
ID0gV1RGTW92ZShtZW1vcnkpOyB9CisgICAgTWVtb3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IEFT
U0VSVChoYXNNZW1vcnkoKSk7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5LT5tb2RlKCk7IH0KKwor
ICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAg
ICAgVmFsaWRhdGVkLAorICAgICAgICBQcmVwYXJlZCwKKyAgICAgICAgQ29tcGlsZWQsCisgICAg
ICAgIEZhaWxlZCwKKyAgICAgICAgQ29tcGxldGVkCisgICAgfTsKKworICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICEhZXJyb3JNZXNzYWdlKCk7IH0K
KyAgICBib29sIGhhc1dvcmsoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OkNvbXBp
bGVkOyB9CisgICAgYm9vbCBoYXNCZWVuUHJlcGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ID49IFN0YXRlOjpQcmVwYXJlZDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Uo
KSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkpOworICAgICAg
ICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7CisgICAgfQogCiBwcml2YXRlOgorICAgIGNsYXNzIFRo
cmVhZENvdW50SG9sZGVyOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKwor
ICAgIHZvaWQgY29tcGxldGUoY29uc3QgTG9ja0hvbGRlciYpOworCisgICAgdm9pZCBtb3ZlVG9T
dGF0ZShTdGF0ZSBzdGF0ZSkgeyBBU1NFUlQoc3RhdGUgPiBtX3N0YXRlKTsgbV9zdGF0ZSA9IHN0
YXRlOyB9CisgICAgdm9pZCBmYWlsKFN0cmluZyYmIGVycm9yTWVzc2FnZSk7CisKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAg
VmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnk7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNU
b1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzOwpAQCAtMTAzLDE2ICsxMzEsMzkgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21w
aWxhdGlvbkNvbnRleHRzOwogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CisgICAgQ29t
cGxldGlvblRhc2sgbV9jb21wbGV0aW9uVGFzazsKKworICAgIFJlZlB0cjxNZW1vcnk+IG1fcmVz
ZXJ2ZWRNZW1vcnk7CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4g
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKICAgICBjb25zdCB1aW50OF90KiBtX3NvdXJjZTsK
ICAgICBjb25zdCBzaXplX3QgbV9zb3VyY2VMZW5ndGg7Ci0gICAgYm9vbCBtX2ZhaWxlZCB7IHRy
dWUgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7Ci0gICAgdWludDMyX3QgbV9jdXJyZW50
SW5kZXg7CiAgICAgTG9jayBtX2xvY2s7CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpJbml0
aWFsIH07CisgICAgY29uc3QgQXN5bmNXb3JrIG1fYXN5bmNXb3JrOworICAgIHVpbnQ4X3QgbV9u
dW1iZXJPZkFjdGl2ZVRocmVhZHM7CisgICAgdWludDMyX3QgbV9jdXJyZW50SW5kZXggeyAwIH07
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBQbGFuOjppbml0aWFsaXpl
Q2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIWZhaWxlZCgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFs
RnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5h
bEZ1bmN0aW9uSW5kZXgpIHsKKyAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsK
KworICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21F
bnRyeXBvaW50KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENhbGxlZSk7CisK
KyAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5
cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9u
LT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisKKyAgICAg
ICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdh
c21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9Cit9CisKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MTAyMWMzOWJkNDI1YjJj
MjViNmJkZWU4YmJjOTc1MjQ1YzM3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIldhc21QbGFuLmgiCisKKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBXb3JrbGlzdDo6VGhy
ZWFkIGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBBdXRvbWF0aWNUaHJlYWQgQmFzZTsKKyAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgV29ya2xpc3QmIHdvcmspCisgICAgICAgIDogQmFzZShsb2NrZXIsIHdvcmsubV9s
b2NrLCB3b3JrLm1fcGxhbkVucXVldWVkKQorICAgICAgICAsIHdvcmtsaXN0KHdvcmspCisgICAg
eworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgYXR0ZW1wdFRvUmVtb3ZlQ29tcGlsYXRp
b25QbGFuKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKKyAgICB7CisgICAgICAgIGF1dG8mIHF1ZXVl
ID0gd29ya2xpc3QubV9xdWV1ZTsKKworICAgICAgICBpZiAocXVldWUuZW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocXVldWUudG9wKCkucGxhbiA9PSBwbGFuKQor
ICAgICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBiaXQgcmFjeSBzaW5jZSB3ZSBjb3VsZCBkZXF1ZXVlIGEgdmFsaWRhdGlvbiB0YXNrLCBmb2xs
b3dlZCBieSBhbm90aGVyIGJ1dCBlbnF1ZXVlIHRoZW0gYmFja3dhcmRzLgorICAgIC8vIFRoaXMg
dGVjaG5pY2FsbHkgaXNuJ3QgaW5jb3JyZWN0IGJ1dCBpdCBtaWdodCBjb21waWxlIGNvZGUgaW4g
YSBzdWJvcHRpbWFsIG9yZGVyLgorICAgIFBvbGxSZXN1bHQgcG9sbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYgcXVldWUgPSB3b3Jr
bGlzdC5tX3F1ZXVlOworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgeworCisgICAg
ICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAg
ICAgICAgaWYgKHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAgIHRpY2tl
dCA9IHF1ZXVlLnRvcCgpLnRpY2tldDsKKyAgICAgICAgICAgIHBsYW4gPSBxdWV1ZS50b3AoKS5w
bGFuOworICAgICAgICAgICAgaWYgKCFxdWV1ZS50b3AoKS5tdWx0aVRocmVhZGVkKCkpCisgICAg
ICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAgICAgICAgICAgIEFTU0VSVCgocHJpb3JpdHkg
PT0gV29ya2xpc3Q6OlByaW9yaXR5OjpDb21waWxhdGlvbikgPT0gcGxhbi0+aGFzQmVlblByZXBh
cmVkKCkpOworICAgICAgICAgICAgaWYgKHBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBi
ZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQg
c2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92
ZUNvbXBpbGF0aW9uUGxhbihsb2NrZXIpOworICAgICAgICAgICAgcGxhbiA9IG51bGxwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7CisgICAgfQorCisgICAg
V29ya1Jlc3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gY29tcGxldGUg
PSBbJl0gKCkgeworICAgICAgICAgICAgcGxhbiA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1
cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CisgICAgICAgIH07CisKKyAgICAgICAgQVNTRVJUKHBs
YW4pOworICAgICAgICBpZiAoIXBsYW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CisgICAgICAgICAg
ICBwbGFuLT5wcmVwYXJlKCk7CisgICAgICAgICAgICBpZiAoIXBsYW4tPmhhc1dvcmsoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKworICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CisgICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVl
LnB1c2goeyBXb3JrbGlzdDo6UHJpb3JpdHk6OkNvbXBpbGF0aW9uLCB0aWNrZXQsIHBsYW4gfSk7
CisgICAgICAgICAgICB3b3JrbGlzdC5tX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7
CisgICAgICAgIH0KKworICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKCk7CisgICAgICAg
IEFTU0VSVCghcGxhbi0+aGFzV29yaygpKTsKKyAgICAgICAgYXR0ZW1wdFRvUmVtb3ZlQ29tcGls
YXRpb25QbGFuKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xvY2spKTsKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdvcmtsaXN0JiB3b3JrbGlzdDsKKyAg
ICBUaWNrZXQgdGlja2V0OworICAgIFJlZlB0cjxQbGFuPiBwbGFuOworfTsKKworYm9vbCBXb3Jr
bGlzdDo6UXVldWVFbGVtZW50OjptdWx0aVRocmVhZGVkKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHByaW9yaXR5KSB7CisgICAgY2FzZSBQcmlvcml0eTo6U2h1dGRvd246CisgICAgY2FzZSBQcmlv
cml0eTo6Q29tcGlsYXRpb246CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8
UGxhbj4mJiBwbGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworCisgICAg
bV9xdWV1ZS5wdXNoKHsgUHJpb3JpdHk6OkNvbXBpbGF0aW9uLCBuZXh0VGlja2V0KCksIFdURk1v
dmUocGxhbikgfSk7CisgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOworfQor
CitXb3JrbGlzdDo6V29ya2xpc3QoKQorICAgIDogbV9sb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkp
CisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgp
KQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRzID0gV1RGOjpudW1i
ZXJPZlByb2Nlc3NvckNvcmVzKCkgLSAxOyAvLyBTYXZlIGEgY29yZSBmb3IgdGhlIG1haW4gdGhy
ZWFkLgorICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDb21waWxhdGlvblRo
cmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkczsgaSsrKQorICAgICAgICBt
X3RocmVhZHNbaV0gPSBzdGQ6Om1ha2VfdW5pcXVlPFdvcmtsaXN0OjpUaHJlYWQ+KGxvY2tlciwg
KnRoaXMpOworfQorCitXb3JrbGlzdDo6fldvcmtsaXN0KCkKK3sKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0
eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsKKyAgICAgICAgbV9wbGFuRW5x
dWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICBtX3RocmVhZHNbaV0tPmpvaW4o
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzQ1Y2Y3MWQ2ODk1ZmFkZmZiODBlY2U4Yjk4N2QwMmFkODA2ZTc4MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBA
IC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
IlZNLmgiCisKKyNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8cXVldWU+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK2NsYXNzIFBsYW47CisKK2NsYXNzIFdvcmtsaXN0IHsKK3B1YmxpYzoKKyAg
ICBXb3JrbGlzdCgpOworICAgIH5Xb3JrbGlzdCgpOworCisgICAgdm9pZCBlbnF1ZXVlKFJlZjxQ
bGFuPiYmKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNz
IFRocmVhZDsKKworICAgIHR5cGVkZWYgdW5zaWduZWQgVGlja2V0OworICAgIFRpY2tldCBuZXh0
VGlja2V0KCkgeyByZXR1cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBCb3g8TG9j
az4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fcGxhbkVu
cXVldWVkOworCisgICAgZW51bSBjbGFzcyBQcmlvcml0eSB7CisgICAgICAgIFNodXRkb3duLAor
ICAgICAgICBDb21waWxhdGlvbiwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworCisKKyAg
ICBzdHJ1Y3QgUXVldWVFbGVtZW50IHsKKyAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHk7CisgICAg
ICAgIFRpY2tldCB0aWNrZXQ7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuOworCisgICAgICAg
IGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNvbnN0OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29tcGFy
YXRvciB7CisgICAgICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yKCkoY29uc3QgUXVldWVFbGVt
ZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbGVmdC50aWNrZXQgPiByaWdodC50aWNrZXQ7CisgICAgICAgICAgICByZXR1cm4g
bGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5OworICAgICAgICB9CisgICAgfTsKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFdURjo6VmVjdG9yIGJ1dCBXVEY6OlZlY3RvciBkb2Vz
IG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IuCisgICAgc3RkOjpwcmlvcml0eV9x
dWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6dmVjdG9yPFF1ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+
IG1fcXVldWU7CisgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZsb3cgYnV0IHRo
YXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21waWxlIHRoaW5n
cyBvZiB0aGUgc2FtZQorICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBvcmRlciwgd2hpY2gg
aXNuJ3Qgd3JvbmcsIGp1c3Qgc3Vib3B0aW1hbC4KKyAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRp
Y2tldCB7IDAgfTsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXV0b21hdGljVGhyZWFk
Pj4gbV90aHJlYWRzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggYjIxZjhhNWNjNjQ1
ZjJlMjViNzc0MTE3YmRhZjk4YWY0NzBkMzRhMS4uZDU2MDkyMDRhM2FmZTlhODMyYTYzYmMxNTJk
OTgyODAxZWFkODk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTMxLDIyICszMSw0MiBAQAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIH07CiAKLUpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2Fz
bTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9k
ZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsICBXYXNt
OjpNZW1vcnk6Ok1vZGUgbW9kZSwgUHJvbWlzZURlZmVycmVkVGltZXI6OlRpY2tldCB0aWNrZXQs
IHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAgIDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2NhbGxMaW5rSW5mb3MoV1RGTW92ZShjYWxs
TGlua0luZm9zKSkKLSAgICAsIG1fd2FzbUV4aXRTdHVicyhXVEZNb3ZlKHdhc21FeGl0U3R1YnMp
KQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX3RpY2tldCh0aWNrZXQpCiAgICAgLCBtX2Nh
bGxlZUNvdW50KGNhbGxlZUNvdW50KQogewogICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgb3du
ZXIpOworICAgIG93bmVyLT5hZGRDb2RlQmxvY2sodm0sIHRoaXMpOwogICAgIG1lbXNldChjYWxs
ZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+KSAqIDIpOwogfQogCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRp
YWxpemUoVk0mIHZtLCBXYXNtOjpQbGFuJiBwbGFuKQoreworICAgIEFTU0VSVCghbV9pbml0aWFs
aXplZCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXBsYW4uaGFzV29yaygpICYmICFwbGFuLmZhaWxl
ZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChwbGFuLm1vZGUoKSA9PSBtb2RlKCkpOworICAgIEFT
U0VSVChwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworICAg
IEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKworICAgIG1fY2Fs
bExpbmtJbmZvcyA9IHBsYW4udGFrZUNhbGxMaW5rSW5mb3MoKTsKKyAgICBtX3dhc21FeGl0U3R1
YnMgPSBwbGFuLnRha2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuLmluaXRpYWxpemVDYWxs
ZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50
cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUp
IHsKKyAgICAgICAgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRy
eXBvaW50Q2FsbGVlKTsKKyAgICAgICAgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxl
ZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgfSk7CisKKyAgICBtX2luaXRpYWxp
emVkID0gdHJ1ZTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
Y2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhl
bHBlcnMuaAppbmRleCBmMDMzMTBlYTVlMjA2MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li40
OWRmYzI2ZmM5ZWEwY2Q4YWY0NDAyODEzMTUzMjg4MDA4Y2MxOTE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTcz
LDYgKzczLDIyIEBAIEFMV0FZU19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVm
ZmVyVmlldyA/IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3Rvcigp
KSA6IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwog
fQogCitBTFdBWVNfSU5MSU5FIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVy
RnJvbVZhbHVlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBi
eXRlT2Zmc2V0OworICAgIHNpemVfdCBieXRlU2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0
V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRv
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVT
aXplKTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVj
ZSkpOworICAgIHJldHVybiBudWxscHRyOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNXZWJB
c3NlbWJseUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIFdlYkFzc2VtYmx5
RnVuY3Rpb24qJiB3YXNtRnVuY3Rpb24sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiYgd2Fz
bVdyYXBwZXJGdW5jdGlvbikKIHsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cyh2bSwgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6aW5mbygpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggMWMxMWIwY2E2NWM5
MTc0MmY4ZTQ4MTNjMjRkOTc1ZjY1ZWViYWExOC4uNjJiNGJlODRjM2ZmZjkxZDg0ODEzMjcwNjc2
MzJlYjdjMTQ2NmE5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0zMiwyNCArMzIsMTQgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2lu
Y2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVz
IGV2ZW4gZm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28g
d2Ugd2FudCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgotICAgIGlmIChtZW1vcnktPm1lbW9y
eSgpKSB7Ci0gICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5j
b2RlQmxvY2sodm0sIGV4ZWMsIG1lbW9yeSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwot
ICAgIH0KLSAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Ci19Ci0KIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogewogICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KQEAgLTc5LDcgKzY5LDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIG1f
Z2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwog
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsK
IAotICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jb2RlQmxvY2soKSk7CiAg
ICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VP
YmplY3QpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJl
eHBvcnRzIiksIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9CkBAIC0xMDYsNiArOTUs
MjQ2IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lkluc3RhbmNlIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5SW5zdGFuY2UpIH07CiAK
K0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQoreworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKworICAgIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpOworCisgICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBl
cnJvcikgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICAvLyBJZiB0aGUgbGlzdCBv
ZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBu
b3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisgICAgaWYgKG1vZHVsZUluZm9ybWF0
aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJB
c3NlbWJseS5JbnN0YW5jZSBiZWNhdXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0
aGUgV2ViQXNzZW1ibHkuTW9kdWxlIHJlcXVpcmVzIGltcG9ydHMiKSkpOworCisgICAgSWRlbnRp
ZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVO
YW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CisgICAgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpj
cmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1
Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworCisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5j
ZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4
ZWMpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisg
ICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBs
aXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBv
YmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCisgICAg
Ly8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFs
dWVzLgorICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7CisgICAgdW5zaWduZWQg
bnVtSW1wb3J0R2xvYmFscyA9IDA7CisKKyAgICBib29sIGhhc01lbW9yeUltcG9ydCA9IGZhbHNl
OworICAgIGJvb2wgaGFzVGFibGVJbXBvcnQgPSBmYWxzZTsKKyAgICAvLyBGb3IgZWFjaCBpbXBv
cnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKKyAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydHMpIHsKKyAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJlc3VsdGFu
dCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25hbWUpLgor
ICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0LT5nZXQoZXhl
YywgaW1wb3J0Lm1vZHVsZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7CisgICAgICAgIC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhy
b3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmplY3Qo
KSkKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKKworICAgICAg
ICAvLyAzLiBMZXQgdiBiZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25h
bWUpCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRN
b2R1bGVWYWx1ZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBp
bXBvcnQuZmllbGQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOworCisgICAgICAgIHN3aXRjaCAoaW1wb3J0LmtpbmQpIHsKKyAgICAgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgICAgIC8vIDQu
IElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6CisgICAgICAgICAgICAgICAgLy8gaS4gSWYgSXND
YWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAg
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7CisKKyAg
ICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1
ZSk7CisgICAgICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24g
RXhvdGljIE9iamVjdDoKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNt
RnVuY3Rpb247CisgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdh
c21XcmFwcGVyRnVuY3Rpb247CisgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24p
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2Vz
IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgorICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNp
Z25hdHVyZUluZGV4OworICAgICAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlv
bi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5j
dGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExl
dCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRT
aWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltcG9y
dGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBk
b2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVy
ZSIpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3
aXNlOgorICAgICAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVu
Y3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdl
YkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVl
IGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNz
ZW1ibHlWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxh
biBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3Mu
CisgICAgICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3Rh
bmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJB
c3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNG
dW5jdGlvbikuCisKKyAgICAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09
IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRJbXBvcnRG
dW5jdGlvbih2bSwgZnVuY3Rpb24sIG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAgICAgICAgICAg
ICAgICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
OlRhYmxlOiB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0
KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4K
KyAgICAgICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgor
ICAgICAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFi
bGUqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2Vi
QXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAg
ICAgICAgICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIp
KSk7CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKKyAgICAgICAgICAgICAgICB1
aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0
b28gc21hbGwiKSkpOworCisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24u
bWF4aW11bSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
VGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVx
dWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCphY3R1YWxN
YXhpbXVtID4gKmV4cGVjdGVkTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlM
aXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9k
dWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgorICAgICAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCisgICAgICAgICAgICAgICAgaW5z
dGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7
CisgICAgICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxk
IGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5KTsKKyAgICAgICAgICAgICAg
ICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5N
ZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAg
ICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9y
eSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7CisK
KyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdl
Q291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOworICAgICAg
ICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlh
bCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICAgICAgaWYgKFdhc206OlBh
Z2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11
bSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVt
ID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
YWN0dWFsTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1v
cnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJl
cyB0aGF0IGl0IGRvZXMiKSkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhp
bXVtID4gZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVy
YWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3Mg
ZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCisgICAgICAgICAgICAgICAgLy8gaWlp
LiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCisgICAgICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVtb3J5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okds
b2JhbDogeworICAgICAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0Ogor
ICAgICAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRo
cm93IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgICAgIEFTU0VSVChtb2R1bGVJbmZvcm1hdGlv
bi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJ
bW11dGFibGUpOworICAgICAgICAgICAgICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2Yg
aSBpcyBpNjQgb3IgVHlwZSh2KSBpcyBub3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5Lkxp
bmtFcnJvci4KKyAgICAgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tp
bXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSk7CisgICAgICAg
ICAgICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMu
CisgICAgICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gaW1wb3J0LmtpbmRJ
bmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxz
W2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXYXNt
OjpJMzI6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUlt
cG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywg
Yml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEds
b2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgeworICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGltcG9ydCBvciB3ZSBzaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVt
b3J5SW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5t
ZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KKyAgICAgICAg
ICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsKKyAgICAgICAgICAgIGlmIChtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICBt
ZW1vcnkgPSBqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVtb3J5KCk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
Lm1heGltdW0oKSk7CisgICAgICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVh
dGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1
Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYg
bW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKSB7CisgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ugc2hvdWxk
IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhh
c1RhYmxlSW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0
aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9y
dCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxl
IGRlZmluaXRpb24uCisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNX
ZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJs
ZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlz
IGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4K
KyAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3Vs
ZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCisgICAgICAgICAgICBBU1NFUlQoIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHRhYmxlKTsgCisgICAg
ICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgICAgICAvLyBNYWtlIHN1
cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2
b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5u
ZWQgcmVnaXN0ZXJzLgorICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVt
b3J5KCkpKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBHbG9iYWxzCisgICAgeworICAgICAgICBB
U1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1hdGlvbi5maXJzdEludGVybmFs
R2xvYmFsKTsKKyAgICAgICAgZm9yIChzaXplX3QgZ2xvYmFsSW5kZXggPSBudW1JbXBvcnRHbG9i
YWxzOyBnbG9iYWxJbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHMuc2l6ZSgpOyArK2ds
b2JhbEluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBnbG9iYWwgPSBtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzW2dsb2JhbEluZGV4XTsKKyAgICAgICAgICAgIEFTU0VSVChnbG9iYWwu
aW5pdGlhbGl6YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOworICAgICAgICAg
ICAgaWYgKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9tR2xv
YmFsSW1wb3J0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7CisgICAgICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xvYmFs
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFs
Qml0c09ySW1wb3J0TnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtb2R1bGVS
ZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CisgICAgCisgICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVs
ZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0UmVzdWx0KTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgIAorICAg
IHJldHVybiBpbnN0YW5jZTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggMzkzZDM3MzE1ODhhODY5MDc3YTli
M2I4YjU5ZWFiM2I0NzE5Y2M5MC4uNjhjNDA5ZmFkMzYzZWM1Mjg3Mzc2YjEwNDFiNGYyZTI3OTZj
MmY2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKQEAgLTM4LDQ3ICszOCwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsK
IAorbmFtZXNwYWNlIFdhc20geworICAgIGNsYXNzIFBsYW47Cit9CisKKwogY2xhc3MgSlNXZWJB
c3NlbWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLQotICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTV2ViQXNzZW1i
bHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOworICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1
bGUqLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
CiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgICAgIHJldHVy
biBtX2NvZGVCbG9jay0+bW9kdWxlKCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ayk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKLSAgICB9Ci0KLSAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCi0gICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7Ci0gICAg
ICAgIHJldHVybiAmaW1wb3J0RnVuY3Rpb25zKClbaWR4XTsKLSAgICB9CisgICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0
KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IEFTU0VSVChj
b2RlQmxvY2soKSk7IHJldHVybiBtX2NvZGVCbG9jay0+bW9kdWxlKCk7IH0KIAotICAgIFdyaXRl
QmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpCi0gICAgewotICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRJbXBvcnRGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB2YWx1ZSwgdW5zaWduZWQgaWR4
KQotICAgIHsKLSAgICAgICAgaW1wb3J0RnVuY3Rpb24oaWR4KS0+c2V0KHZtLCB0aGlzLCB2YWx1
ZSk7Ci0gICAgfQorICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KiBpbXBvcnRGdW5jdGlvbih1bnNp
Z25lZCBpZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyBy
ZXR1cm4gJmltcG9ydEZ1bmN0aW9ucygpW2lkeF07IH0KKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxs
PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxK
U0NlbGw+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rp
b25zKCkpOyB9CisgICAgdm9pZCBzZXRJbXBvcnRGdW5jdGlvbihWTSYgdm0sIEpTQ2VsbCogdmFs
dWUsIHVuc2lnbmVkIGlkeCkgeyBpbXBvcnRGdW5jdGlvbihpZHgpLT5zZXQodm0sIHRoaXMsIHZh
bHVlKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9t
ZW1vcnkuZ2V0KCk7IH0KLSAgICAvLyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29t
cGlsZS4KLSAgICB2b2lkIHNldE1lbW9yeShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqKTsKKyAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVl
KTsgfQogICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5
KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KQEAgLTkwLDEwICs3Miw3IEBAIHB1YmxpYzoKICAg
ICBkb3VibGUgbG9hZEY2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8ZG91YmxlPihsb2FkSTY0R2xvYmFsKGkpKTsgfQogICAgIHZvaWQgc2V0R2xvYmFsKHVu
c2lnbmVkIGksIGludDY0X3QgYml0cykgeyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9CiAK
LSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2Yo
V3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogaWR4OwotICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7IHJldHVybiBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIGlkeDsgfQogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UsIG1fdGFibGUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IDU2ZjIwYjQzNTA2OWYzZmI1
ZjBiNjkxMjJjMzcyOTgxYTBjNWY1MzkuLjMyZjkxMzBiZDQwZDY0MTM0ZWIxZjljYzFjNjdhNTA4
YjlmNjJmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC00MiwzNSArNDIsMTkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJB
c3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4gbW9k
ZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJj
ZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gT24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yIGlzIHRocm93bi4KLSAgICBwbGFuLnJ1bihtb2RlKTsKLSAgICBpZiAocGxh
bi5mYWlsZWQoKSkgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihleGVjLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1vZGUpCi0gICAgICAg
IEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBjYWxsZWVDb3Vu
dCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7Ci0gICAgYXV0byogY29kZUJsb2NrID0g
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB0aGlzLCBwbGFuLnRha2VDYWxsTGlu
a0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxlZUNv
dW50KTsKLQotICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCksCi0gICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0SlNFbnRyeXBv
aW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3
YXNtRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiBjb2RlQmxvY2s7
CisgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpT
V2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUocGxhbikpOworICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KIAotSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWlu
dDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmFkZENvZGVCbG9jayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1
cmUpOwotCi0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5
dGVTaXplKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byBtb2RlID0gY29kZUJsb2Nr
LT5tb2RlKCk7CisgICAgQVNTRVJUKCF0aGlzLT5jb2RlQmxvY2sobW9kZSkpOworICAgIG1fY29k
ZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIFN0cnVjdHVyZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03OCw2MSArNjIsMjYgQEAg
U3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlN
b2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6
OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRy
PEFycmF5QnVmZmVyPiYmIHNvdXJjZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAs
IG1fc291cmNlQnVmZmVyKHNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKQogewogfQogCi1KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKLXsKLSAgICBXYXNt
OjpNZW1vcnk6Ok1vZGUgbW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IFdhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2RlczsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja3NbaV0gJiYgbV9jb2RlQmxvY2tzW2ldLT5pc1NhZmVU
b1J1bihtZW1vcnkpKQotICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoIW1fY29kZUJsb2Nrc1ttb2RlXSk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2Rl
IGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCi0gICAgV2FzbTo6
UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRh
KCkpLCBtX3NvdXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLQotICAgIGF1dG8qIGNvZGVCbG9j
ayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIEFTU0VSVChwbGFuLmV4cG9ydHMoKS5z
aXplKCkgPT0gbV9leHBvcnRTeW1ib2xUYWJsZS0+c2l6ZSgpKTsKLSAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKQotICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChleHAsIG1fZXhwb3J0U3ltYm9sVGFibGUtPmNvbnRhaW5z
KGV4cC5maWVsZC5pbXBsKCkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxv
Y2stPm1vZGUoKSk7Ci0gICAgbV9jb2RlQmxvY2tzW21vZGVdLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3Vy
Y2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFdhc206OlBsYW4g
cGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOwotCi0gICAgYXV0byogY29kZUJsb2NrID0gYnVp
bGRDb2RlQmxvY2sodm0sIGV4ZWMsIHBsYW4pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsKTsKLQogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmpl
Y3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5t
b2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6
OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAg
IGZvciAoYXV0byYgZXhwIDogcGxhbi0+ZXhwb3J0cygpKSB7CiAgICAgICAgIGF1dG8gb2Zmc2V0
ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoTm9Mb2NraW5nTmVjZXNz
YXJ5KTsKICAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3Nhcnks
IGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsK
ICAgICB9CiAKLSAgICBtX3NvdXJjZUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc291cmNl
LCBieXRlU2l6ZSk7Ci0gICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUlu
Zm9ybWF0aW9uKCk7CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1bGVJ
bmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBleHBv
cnRTeW1ib2xUYWJsZSk7Ci0gICAgbV9jb2RlQmxvY2tzW2NvZGVCbG9jay0+bW9kZSgpXS5zZXQo
dm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggNzA0MDY4YzY1ZGUxM2ViYjJiNmE4OGQ1OWJl
NTZlNThlNmJiM2IwOC4uMWM2YjUwZGFiZTlmYmExMmE5NzMzYTUzMjhiYmUzMDk5MjY3M2E2NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaApAQCAtNDgsMzMgKzQ4LDMzIEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBw
dWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0
cnVjdGlibGVPYmplY3QgQmFzZTsKIAorICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBj
cmVhdGVTdHViKFZNJiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwg
UmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbik7CiAgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVpbnQ4X3QqIHNvdXJjZSwg
c2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCiAg
ICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29u
c3QgeyByZXR1cm4gKm1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KLSAgICBSZWZQdHI8V2Fz
bTo6TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0
aW9uLT5tZW1vcnkudGFrZVJlc2VydmVkTWVtb3J5KCk7IH0KICAgICBTeW1ib2xUYWJsZSogZXhw
b3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgp
OyB9CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICB9CiAKLSAgICAvLyBSZXR1cm5z
IHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBtb2R1bGUgd2FzIG9yaWdpbmFsbHkgY29tcGlsZWQg
ZXhwZWN0aW5nIHRvIHVzZS4gVGhpcyB3b24ndCBuZWVkIHRvIHJlY29tcGlsZS4KLSAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9ja3NbbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKV0uZ2V0KCk7IH0KLSAgICAvLyBSZXR1cm5z
IHRoZSBhcHByb3ByaWF0ZSBjb2RlIGJsb2NrIGZvciB0aGUgZ2l2ZW4gbWVtb3J5LCBwb3NzaWJs
eSB0cmlnZ2VyaW5nIGEgcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUpIHsg
cmV0dXJuIG1fY29kZUJsb2Nrc1ttb2RlXS5nZXQoKTsgfQorCisgICAgUmVmPEFycmF5QnVmZmVy
PiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUJ1ZmZlci5jb3B5UmVmKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYs
IEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9k
ZT4gbW9kZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s7CisgICAgdm9pZCBhZGRDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKik7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IGJ5dGVTaXplKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwg
UmVmUHRyPEFycmF5QnVmZmVyPiYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVm
UHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKKyAgICBSZWY8QXJyYXlCdWZm
ZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFi
bGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpNZW1vcnk6Ok51bWJlck9mTW9kZXNdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYWMzMTgxYjNmOWRjZWU0ZTEzM2IwODdm
ZjcxZjQ5MDE1ZTQ4OGQyZC4uNjQ2Yzg1N2ZhMDc0NWM4ZjVkYmIzM2ZlYzgyMjQxOGQyODRmYzg0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC03NywyNDggKzc3LDYgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoZXhlYywganNNb2R1bGUs
IGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUpKTsKIH0KIAotSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBp
bXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUpCi17Ci0gICAgYXV0byYg
dm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKLQotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1h
dGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwotCi0gICAgYXV0byBleGNlcHRp
b24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH07Ci0K
LSAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5
cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0g
ICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3Qp
Ci0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgiY2FuJ3QgbWFrZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBiZWNhdXNlIHRoZXJlIGlzIG5v
IGltcG9ydHMgT2JqZWN0IGFuZCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxlIHJlcXVpcmVzIGltcG9y
dHMiKSkpOwotCi0gICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFu
Y2UiKSk7Ci0gICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlv
bik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotCi0g
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+
Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIG51bGxwdHIpOwotCi0gICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVz
IGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMs
IFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3Rz
LCByZXNwZWN0aXZlbHkuCi0gICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5
IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgotICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9u
cyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtSW1wb3J0R2xvYmFscyA9IDA7Ci0KLSAgICBib29sIGhh
c01lbW9yeUltcG9ydCA9IGZhbHNlOwotICAgIGJvb2wgaGFzVGFibGVJbXBvcnQgPSBmYWxzZTsK
LSAgICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKLSAgICBmb3IgKGF1
dG8mIGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKLSAgICAgICAgLy8gMS4g
TGV0IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmpl
Y3QsIGkubW9kdWxlX25hbWUpLgotICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0g
aW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIC8vIDIuIElmIFR5cGUo
bykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghaW1wb3J0
TW9kdWxlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0
IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1
bGVWYWx1ZSkpKTsKLQotICAgICAgICAvLyAzLiBMZXQgdiBiZSB0aGUgdmFsdWUgb2YgcGVyZm9y
bWluZyBHZXQobywgaS5pdGVtX25hbWUpCi0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgICAgIHN3aXRjaCAoaW1wb3J0Lmtp
bmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAg
ICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgotICAgICAgICAgICAgLy8g
aS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJy
b3IuCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkpOwotCi0g
ICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7
Ci0gICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMg
T2JqZWN0OgotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uOwot
ICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rp
b247Ci0gICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rp
b24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVy
ZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4OwotICAgICAgICAgICAg
ICAgIGlmICh3YXNtRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0
dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3
YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAgICAg
ICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgotICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1bmN0aW9uKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXNbaW1wb3J0LmtpbmRJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkU2ln
bmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGRvZXNuJ3QgbWF0
Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIikpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgotICAgICAgICAgICAg
Ly8gYS4gTGV0IGNsb3N1cmUgYmUgYSBuZXcgaG9zdCBmdW5jdGlvbiBvZiB0aGUgZ2l2ZW4gc2ln
bmF0dXJlIHdoaWNoIGNhbGxzIHYgYnkgY29lcmNpbmcgV2ViQXNzZW1ibHkgYXJndW1lbnRzIHRv
IEphdmFTY3JpcHQgYXJndW1lbnRzIHZpYSBUb0pTVmFsdWUgYW5kIHJldHVybnMgdGhlIHJlc3Vs
dCwgaWYgYW55LCBieSBjb2VyY2luZyB2aWEgVG9XZWJBc3NlbWJseVZhbHVlLgotICAgICAgICAg
ICAgLy8gTm90ZTogZG9uZSBhcyBwYXJ0IG9mIFBsYW4gY29tcGlsYXRpb24uCi0gICAgICAgICAg
ICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3MuCi0gICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcg
dGhlIEpTQ2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVt
ZW50cyBiLiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZl
KSBhbmQgdi4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KLQotICAgICAgICAgICAgQVNTRVJUKG51
bUltcG9ydEZ1bmN0aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRJbXBvcnRGdW5jdGlvbih2bSwgZnVuY3Rpb24sIG51bUltcG9ydEZ1bmN0aW9ucysr
KTsKLSAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
VGFibGU6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8v
IFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gICAg
ICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgotICAgICAgICAg
ICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxl
KiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsK
LSAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0
LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdGFibGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOwotCi0gICAgICAgICAgICB1aW50MzJfdCBl
eHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRp
YWwoKTsKLSAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgp
OwotICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlh
bCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbi5tYXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWFjdHVhbE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJs
ZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJl
cyB0aGF0IGl0IGRvZXMiKSkpOwotICAgICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+
ICpleHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBv
cnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0
ZWQgJ21heGltdW0nIikpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWkuIEFw
cGVuZCB2IHRvIHRhYmxlcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1d
IHRvIGltcG9ydHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1w
b3J0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRo
aXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOwotICAgICAgICAg
ICAgaGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBv
YmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCFt
ZW1vcnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90
IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7Ci0KLSAgICAgICAgICAgIFdh
c206OlBhZ2VDb3VudCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
aW5pdGlhbCgpOwotICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbEluaXRpYWwgPSBt
ZW1vcnktPm1lbW9yeSgpLmluaXRpYWwoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFs
IDwgZXhwZWN0ZWRJbml0aWFsKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkg
aW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSkgewotICAgICAgICAgICAgICAgIFdhc206OlBhZ2VD
b3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1
bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKLQotICAgICAgICAgICAgICAgIGlmIChhY3R1
YWxNYXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiTWVtb3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUn
cyBleHBlY3RlZCAnbWF4aW11bSciKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCi0gICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2
LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnko
dm0sIGV4ZWMsIG1lbW9yeSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewotICAgICAgICAgICAgLy8gNS4gSWYg
aSBpcyBhIGdsb2JhbCBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBp
bW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgICAgIEFTU0VSVCht
b2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOwotICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9i
YWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOwotICAgICAgICAgICAg
Ly8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCi0gICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAgICAg
ICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4
XS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVj
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkYzMjoK
LSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywg
Yml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAg
ICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHsKLSAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBz
aG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93
biBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBv
cnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAm
JiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwotICAgICAgICAgICAgLy8gV2UgY3JlYXRl
IGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgUmVm
UHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5OwotICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5oYXNSZXNlcnZlZE1lbW9yeSgpKQotICAgICAgICAgICAgICAgIG1lbW9yeSA9
IGpzTW9kdWxlLT50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11
bSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsCi0gICAgICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNl
Tm9uTnVsbCgpKSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAgICBpZiAoISFtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhl
ciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRp
b24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYm
ICFoYXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBX
ZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRl
KGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVT
dHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhp
bXVtKCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9j
YXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCi0gICAgICAgICAgICAvLyBJ
ZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2
YWxpZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAotICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWluc3Rh
bmNlLT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1l
bW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51
bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAg
ICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVh
dGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1
Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOwotICAgIH0KLQotICAg
IC8vIEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1v
ZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBmb3IgKHNpemVf
dCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5m
b3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAgICAgIGNv
bnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhd
OwotICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6
R2xvYmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9u
VHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9i
YWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBp
bnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2Jh
bChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwotICAgIEpTVmFsdWUgc3RhcnRS
ZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShz
dGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305199</attachid>
            <date>2017-03-23 09:11:40 -0700</date>
            <delta_ts>2017-03-23 22:17:17 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-169187-20170323091139.patch</filename>
            <type>text/plain</type>
            <size>158620</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YmVhYjMwZWVhZjQwZWZiMDU5MTE0YWZhMmRiNjljNmMwZjcwNGFkLi5jMThkZDQ1ZGNmNjBjMDIy
Nzg0NzUxNTkxYTNiZTk1NTdjZDFlMWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTcgQEAKKzIwMTctMDMtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxT
d2VlcGVyOjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVy
OjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
Lmg6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHA6CisgICAgICAgIChK
U0M6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcik6CisgICAgICAg
ICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNSdW5M
b29wVGltZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFRpbWVyLmNwcC4KKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVy
KToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNldFJ1bkxvb3ApOgorICAgICAgICAo
SlNDOjpKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKToKKyAgICAgICAgKEpTQzo6SlNS
dW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVy
OjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OmNhbmNlbFRp
bWVyKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6
OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGlt
ZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5k
aW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQ
ZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hl
ZHVsZVdvcmtTb29uKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVk
dWxlQmxvY2tlZFRhc2spOgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpuZXh0VGlja2V0
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dlYkFzc2VtYmx5LmNwcDoK
KyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxl
RnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGls
ZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMpOgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5oOgorICAgICAgICAqIHdhc20vSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptYXhpbXVtKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpt
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjppbnRlcm5hbEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzZXRNZW1vcnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjptb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbGVk
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzV29yayk6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46Omhhc0JlZW5QcmVwYXJlZCk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVy
cm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Om1vdmVUb1N0YXRlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdh
c20vV2FzbVdvcmtsaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0
OjpRdWV1ZUVsZW1lbnQ6Om11bHRpVGhyZWFkZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpXb3JrbGlzdCk6
CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVdvcmtsaXN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
bmV4dFRpY2tldCk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpDb21wYXJhdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAo
SlNDOjpjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1v
cnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZVN0dWIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjphZGRD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9j
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseU1vZHVsZTo6c291cmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UpOiBEZWxldGVkLgorCiAy
MDE3LTAzLTIyICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFtKU0NdIFVzZSBqc05vbnRyaXZpYWxTdHJpbmcgZm9yIE51bWJlciB0b1N0cmluZyBvcGVy
YXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg1ZTE4ZDU1YmQxMzhiOTE3
YTMyNTc4ODViZGVlMzkzOTQzOWUzN2YuLmNhYjk3MzFiYzk2OTNkYmZhYTQ3NDU2Y2JhMTM4MTY3
MTE4OWUxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzE2LDExICsxMzE2
LDE3IEBACiAJCTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjgxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi87IH07CiAJCTUyRjZDMzVEMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QjFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovOyB9OwogCQk1MkY2QzM1RTFF
NzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLzsgfTsK
KwkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMzFFN0ExMTQ2MDAz
QzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3
QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJ
NTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAv
KiBXYXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNt
T3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNC
MTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcwMURBQzMzRTUwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcCAqLzsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmggKi87IH07CisJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4
NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi87IH07CisJCTUzNDYzODcz
MUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyog
SlNSdW5Mb29wVGltZXIuY3BwICovOyB9OworCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyog
UHJvbWlzZURlZmVycmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5oICovOyB9OworCQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAq
LzsgfTsKIAkJNTM0ODZCQjcxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQjYxQzE3OTVD
MzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFB1YmxpYywgKTsgfTsgfTsKIAkJNTM0ODZCQkIxQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRB
cnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJNTM0
OTAyODUxQzcyNzZCNzAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ5MDI4MjFDNzI0MkM4MDAxMkJD
QjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLzsgfTsKQEAgLTEzNTUsNiArMTM2MSw3IEBACiAJ
CTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5jcHAgKi87IH07CiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5J
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CiAJCTUz
RkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAv
KiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9
OwogCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQx
MUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwpAQCAt
MTYzOCw2ICsxNjQ1LDcgQEAKIAkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTUw
RUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oICovOyB9OwogCQk5Nzg4MDE0MDE0NzFBRDkyMDA0
MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Nzg4RkMyMjE0NzFBRDBDMDA2OENFMkQgLyogSlNEYXRlTWF0aC5jcHAg
Ki87IH07CiAJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Nzg4RkMyMzE0NzFBRDBD
MDA2OENFMkQgLyogSlNEYXRlTWF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTk4MUVEODIzMjgyMzREOTFCQUVDQ0FERSAvKiBNYWNoaW5lQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjg4
MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVDb250ZXh0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTkwREE2N0YxQzhFMzE2QTAwMjk1
MTU5IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRh
dGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
MERBNjdFMUM4RTMxMUQwMDI5NTE1OSAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5
SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk5MjhGRjM5MThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAgKi87IH07CiAJ
CTk5MjhGRjNDMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyOEZGM0ExOEFDNEFFQzAwQjhD
RjEyIC8qIEpTUmVwbGF5SW5wdXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTIyMzAsOCArMjIzOCw2IEBACiAJCUMyQ0YzOUMxMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lmgg
Ki87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5
OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1
MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKLQkJQzJFNTI2QkUx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMy
RjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAx
ODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9OwogCQlDMkZDQUUxMDE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2Nr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0
NDEsNyArMjQ0Nyw2IEBACiAJCUZFRTQzRkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRo
cmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVF
NDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQy
OEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFu
ZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3Ry
aW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTk4MUVEODIzMjgyMzRE
OTFCQUVDQ0FERSAvKiBNYWNoaW5lQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjg4MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVD
b250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJ
dGVtUHJveHkgc2VjdGlvbiAqLwpAQCAtMzczMiw2ICszNzM3LDcgQEAKIAkJMjY0MDkxRkExQkUy
RkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEFpck9wY29kZS5vcGNvZGVz
OyBwYXRoID0gYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fpci9B
aXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjlENjM2RDFCRkJF
NUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTE91dHB1dC5oOyBwYXRoID0gZnRsL0ZUTE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyODgwNkUyMTE1NUU0NzhBOTNGQTdCMDIgLyogTWFjaGluZUNvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaGluZUNvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTExMTI0MzE5MkZD
RTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEN1c3RvbUdldHRlclNldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNzk3LDExICszODAzLDE3IEBACiAJCTUyQzk1MkI4MTlBMjhBMUMw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVByb2Zp
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQg
LyogV2FzbVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21X
b3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMwMzFFN0ExMTQ2
MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzAxRTcwQ0YzRDAwRjEy
QUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTUnVuTG9vcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODcy
MUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1J1bkxvb3BUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9taXNlRGVmZXJyZWRU
aW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3NjFFNzFFMDZFMDBG
MTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzQ4NkJCNjFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBl
ZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDkwMjgyMUM3MjQyQzgw
MDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gVHlwZWRBcnJheUNUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9UeXBlZEFy
cmF5Q1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg0Miw2ICszODU0
LDcgQEAKIAkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZVBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2Fz
bU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNkJG
NkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGOEQxRkYxRTgz
ODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFE
N0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzgyLDggKzQ3OTUsNiBAQAogCQlDMkNGMzlCRjE2
RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQVBJV3JhcHBl
ck9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkRBNzc4MjE4RTI1OTk5
MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGVhcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDM5LDcgKzUwNTAsNiBAQAogCQlGRUYwNDA1MDFB
QUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjg4MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hY2hpbmVDb250ZXh0
Lmg7IHBhdGggPSBNYWNoaW5lQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01ODk5LDggKzU5MDksNiBAQAogCQkJCUE1NEMy
QUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCAqLywKIAkJCQlBNTMxMUMzNDFD
NzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgKi8sCiAJCQkJQTUzMTFD
MzUxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCAqLywKLQkJCQlDMkU1
MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywKLQkJCQlDMkU1MjZCQzE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8sCiAJCQkJMEZBREU2NzIxRDREMjNCQzAw
NzY4NDU3IC8qIEhlYXBVdGlsLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1Qjcx
IC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLApAQCAtNjI2NiwxMSArNjI3NCwxNCBAQAogCQkJ
CTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0
QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNF
Njc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLywKKwkJCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjEx
MTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8sCiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2
IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBX
YXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2Fz
bVNpZ25hdHVyZS5oICovLAogCQkJCTUzRkY3RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFs
aWRhdGUuY3BwICovLAogCQkJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFsaWRh
dGUuaCAqLywKKwkJCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNw
cCAqLywKKwkJCQk1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHdhc207CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NjQyNyw2ICs2NDM4LDggQEAKIAkJCQkxNEExNTYzMDEwOTY2MzY1MDA2RkEyNjAgLyogRGF0ZUlu
c3RhbmNlQ2FjaGUuaCAqLywKIAkJCQlCQ0QyMDM0NzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVBy
b3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNEMjAzNDgwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90
b3R5cGUuaCAqLywKKwkJCQk1MzQ2Mzg3NjFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwICovLAorCQkJCTUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNl
RGVmZXJyZWRUaW1lci5oICovLAogCQkJCTE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZp
bmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRkUwNTAwRjFBQTkwOTExMDBEMzNCMzMg
LyogRGlyZWN0QXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAxMDFBQTkwOTExMDBEMzNCMzMg
LyogRGlyZWN0QXJndW1lbnRzLmggKi8sCkBAIC02ODE1LDYgKzY4MjgsOCBAQAogCQkJCTBGN0Mz
OUZDMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi8sCiAJCQkJQkNE
MjAyQkYwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNE
MjAyQzAwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5oICovLAorCQkJCTUzNDYz
ODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgKi8sCisJCQkJNTM0NjM4
NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNzBCMEE5RDAx
QTlCNjYyMDAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oICovLAogCQkJCTUyNzc3M0REMUFBRjgz
QUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgKi8sCiAJCQkJNTJDMDYxMUQxQUE1MUUxQjAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi8sCkBAIC04MTA4LDYgKzgxMjMsNyBAQAogCQkJCTBG
RUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MzBGQjMwMjFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRh
dGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyog
QjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJF
RUQ4IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjI3LDYgKzgyNDMsNyBAQAog
CQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDI5RDhERTBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxs
RnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0RkI0QTAw
MTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNC
MTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTg1
MTMsNiArODUzMCw3IEBACiAJCQkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2
IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDhFM0MxREE0MUI4
MTAwMzk0NzhGIC8qIERPTUpJVFBhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU2RjU2REUxRTY0RUFENjAwRDE3ODAxIC8qIFZNVHJhcHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzN0FEODNDMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRQYXRjaHBvaW50UGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzdBRDgzRDFEQTQ5Mjg2MDBGM0Q0MTIgLyogRE9NSklUUmVn
LmggaW4gSGVhZGVycyAqLywKQEAgLTg2ODEsNyArODY5OSw2IEBACiAJCQkJQTUzOThGQUIxQzc1
MERBNDAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0QzJB
QjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBREU2NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGls
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTMwLDYgKzkxNDcsNyBAQAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5Jbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVn
RXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2Mjkz
MDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDEx
MUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTQ5LDYg
Kzk5NjcsNyBAQAogCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzBGQjMw
NDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQzNDIyQTYyMUMxNThFNkEwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjMzOERGNTFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0RhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNDIsNiArMTAyNjEsNyBAQAog
CQkJCTE0QUQ5MTE3MURDQTk3RkQwMDE0RjlGRSAvKiBFdmFsQ29kZUJsb2NrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NzM0MUUyMURDMkNFOTYwMEFBMjlCQSAvKiBFdmFsRXhlY3V0YWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTQ5ODIwMzE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRM
b29wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNDYzODczMUU3MEQwMTUwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTFDMEZGRjFCMTk0RkQxMDBC
NTNGQ0EgLyogRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBDMTlCMUQ3NzZB
OTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTJERTBGMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTAzMTksNyArMTAzMzksNiBAQAogCQkJCUE1Mzk4RkFDMUM3NTBEQTYwMDYw
QTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0QzJBQjAxQzY1
NDRFRTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMx
MUMzNzFDNzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVy
blZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAv
KiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNFMTA3RUMzNzYwMDQyN0E0
OCAvKiBJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA2NDMsNiArMTA2NjIsNyBA
QAogCQkJCTk5MkFCQ0Y5MUJFQTlCRDIwMDY0MDNBMCAvKiBSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MkY1NkI0MUU0RTg0QTQwMDM1OTUzQiAvKiBSZW1v
dGVDb25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk5OEVENjc0
MUJFRDcwQUMwMEREODAxNyAvKiBSZW1vdGVDb250cm9sbGFibGVUYXJnZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTM0NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBS
ZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5NTU2Njg2MUU0
RThCMEYwMEFBRTEzQyAvKiBSZW1vdGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTkyRjU2QjUxRTRFODRBODAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvckNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2
aXR5Q2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxs
YmFjay5oCmluZGV4IGRkZWUyNTgzZTQ5ZTZiOTY5MzkwODBlMzM4ZWI1YTk5YzA0MGI5MmMuLmZh
N2I2NGRhOWM0MzFmN2YwMjE4MTdiYjk0YTk0OTZmMTZlYzE1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCkBAIC0yOCw3ICsyOCw3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5jbHVkZSAiSlNS
dW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBVU0UoQ0YpCkBA
IC00MCw4ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRnVsbEdDQWN0aXZpdHlDYWxs
YmFjazsKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlD
YWxsYmFjayA6IHB1YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NB
Y3Rpdml0eUNhbGxiYWNrIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0
eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgc3RhdGljIFJlZlB0cjxGdWxsR0NBY3Rp
dml0eUNhbGxiYWNrPiBjcmVhdGVGdWxsVGltZXIoSGVhcCopOwogICAgIHN0YXRpYyBSZWZQdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBjcmVhdGVFZGVuVGltZXIoSGVhcCopOwogCkBAIC03MCwyMSAr
NzEsMjEgQEAgcHJvdGVjdGVkOgogCiAjaWYgVVNFKENGKQogICAgIEdDQWN0aXZpdHlDYWxsYmFj
ayhWTSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAg
ICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxheShzX2RlY2FkZSkKICAg
ICB7CiAgICAgfQogI2VsaWYgVVNFKEdMSUIpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2
bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAg
LCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsKICAg
ICB9CiAjZWxzZQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSogdm0pCi0gICAgICAgIDogSGVh
cFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUp
CiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk2MTI4ZDAzODM4Y2E0YTc0NTUwZWQ5MTZk
Zjc3YTMyNWQ2YjQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSGVhcFRpbWVy
LmgiCi0KLSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJJbmNyZW1l
bnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNFKEdMSUIpCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgVVNFKENGKQotICAgIAot
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgSGVhcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAq
IDM2NSAqIDEwOwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0gICAgOiBtX3ZtKHZt
KQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotewotICAgIHNldFJ1bkxvb3Aodm0t
PmhlYXAucnVuTG9vcCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5M
b29wUmVmIHJ1bkxvb3ApCi17Ci0gICAgaWYgKG1fcnVuTG9vcCkgewotICAgICAgICBDRlJ1bkxv
b3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdl
dCgpKTsKLSAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7Ci0gICAgICAgIG1fdGltZXIuY2xlYXIo
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJ1bkxvb3ApIHsKLSAgICAgICAgbV9ydW5Mb29wID0g
cnVuTG9vcDsKLSAgICAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BU
aW1lckNvbnRleHQpKTsKLSAgICAgICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOwotICAgICAgICBt
X3RpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9j
b250ZXh0KSk7Ci0gICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90
aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICB9Ci19Ci0KLUhlYXBUaW1l
cjo6fkhlYXBUaW1lcigpCi17Ci0gICAgc2V0UnVuTG9vcCgwKTsKLX0KLQotdm9pZCBIZWFwVGlt
ZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29udGV4dFB0cikKLXsK
LSAgICBIZWFwVGltZXIqIHRpbWVyID0gc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4oY29udGV4dFB0
cik7Ci0gICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgUmVmUHRyPFZNPiB2bSA9
IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7Ci0gICAgaWYgKCF2bSkgewotICAgICAgICAvLyBUaGUg
Vk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgotICAgICAg
ICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7Ci0gICAgICAgIHRp
bWVyLT5kb1dvcmsoKTsKLSAgICB9Ci0KLSAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsK
LX0KLQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNv
bmRzKQotewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCks
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQot
ewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJz
b2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNhZGUpOwotICAgIG1faXNTY2hlZHVsZWQgPSBm
YWxzZTsKLX0KLQotI2VsaWYgVVNFKEdMSUIpCi0KLWNvbnN0IGxvbmcgSGVhcFRpbWVyOjpzX2Rl
Y2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOwotCi1zdGF0aWMgR1NvdXJjZUZ1bmNzIGhl
YXBUaW1lclNvdXJjZUZ1bmN0aW9ucyA9IHsKLSAgICBudWxscHRyLCAvLyBwcmVwYXJlCi0gICAg
bnVsbHB0ciwgLy8gY2hlY2sKLSAgICAvLyBkaXNwYXRjaAotICAgIFtdKEdTb3VyY2UqLCBHU291
cmNlRnVuYyBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCi0gICAgewot
ICAgICAgICByZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOwotICAgIH0sCi0gICAgbnVsbHB0ciwg
Ly8gZmluYWxpemUKLSAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCi0gICAgbnVsbHB0
ciwgLy8gY2xvc3VyZV9tYXJzaGFsbAotfTsKLQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZt
KQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKLSAgICAs
IG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmaGVhcFRpbWVyU291cmNlRnVuY3Rpb25z
LCBzaXplb2YoR1NvdXJjZSkpKSkKLXsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdl
dCgpLCAiW0phdmFTY3JpcHRDb3JlXSBIZWFwVGltZXIiKTsKLSAgICBnX3NvdXJjZV9zZXRfY2Fs
bGJhY2sobV90aW1lci5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsK
LSAgICAgICAgYXV0byYgaGVhcFRpbWVyID0gKnN0YXRpY19jYXN0PEhlYXBUaW1lcio+KHVzZXJE
YXRhKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoaGVhcFRpbWVyLm1fdGltZXIu
Z2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBIZWFwVGltZXI6OnNfZGVjYWRlICogR19V
U0VDX1BFUl9TRUMpOwotICAgICAgICBoZWFwVGltZXIudGltZXJEaWRGaXJlKCk7Ci0gICAgICAg
IHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKLSAgICB9LCB0aGlzLCBudWxscHRyKTsKLSAgICBn
X3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9k
ZWZhdWx0KCkpOwotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQotewotICAgIGdfc291cmNl
X2Rlc3Ryb3kobV90aW1lci5nZXQoKSk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZp
cmUoKQotewotICAgIG1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgaWYgKCFtX2FwaUxvY2stPnZt
KCkpIHsKLSAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KLSAgICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsK
LSAgICAgICAgZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgbV9hcGlMb2NrLT51bmxvY2soKTsKLX0K
LQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRz
KQotewotICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21v
bm90b25pY190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNFQ19QRVJfU0VDKTsKLSAg
ICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRpbWVy
KCkKLXsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9t
b25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgbV9pc1Nj
aGVkdWxlZCA9IGZhbHNlOwotfQotI2Vsc2UKLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkK
LSAgICA6IG1fdm0odm0pCi17Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci19Ci0K
LXZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNj
aGVkdWxlVGltZXIoZG91YmxlKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIo
KQotewotfQotI2VuZGlmCi0gICAgCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwVGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJi
NDcxZjYwZGI4YzYzNzRjNTUwMTk4ZDBiZTllMmZjY2E4YTZiNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdMSUIp
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBKU0xvY2s7Ci1jbGFzcyBWTTsKLQotY2xhc3MgSGVhcFRpbWVyIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEhlYXBUaW1lcj4gewotcHVibGljOgotICAgIEhlYXBUaW1l
cihWTSopOwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgdm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5M
b29wVGltZXJSZWYsIHZvaWQqKTsKLSNlbmRpZgotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgfkhlYXBUaW1lcigpOwotICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7Ci0K
LSAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKLSAgICB2
b2lkIGNhbmNlbFRpbWVyKCk7Ci0gICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTY2hlZHVsZWQ7IH0KLQotI2lmIFVTRShDRikKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKLSNlbmRpZiAvLyBVU0UoQ0YpCi0gICAgCi1w
cm90ZWN0ZWQ6Ci0gICAgVk0qIG1fdm07Ci0KLSAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7
Ci0gICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsKLSNpZiBVU0UoQ0YpCi0gICAgc3Rh
dGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOwotCi0gICAgUmV0YWluUHRyPENGUnVu
TG9vcFRpbWVyUmVmPiBtX3RpbWVyOwotICAgIFJldGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVu
TG9vcDsKLSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OwotCi0gICAg
TG9jayBtX3NodXRkb3duTXV0ZXg7Ci0jZWxpZiBVU0UoR0xJQikKLSAgICBzdGF0aWMgY29uc3Qg
bG9uZyBzX2RlY2FkZTsKLSAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOwotICAgIEdSZWZQdHI8R1Nv
dXJjZT4gbV90aW1lcjsKLSNlbmRpZgotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIGludmFsaWRh
dGUoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKaW5kZXggY2ZlODliODcwN2NlYmM3ZjRh
ZjRkNjM1NjY5NDExZTE3ZGMwYWM1Mi4uOGNiZmE5ZTgwNDBkYzYxZWZiMDE5YjIxNDU1NDQ1NWUy
ZmE4MzFiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50
YWxTd2VlcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCkBAIC00MSwxMSArNDEsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBzd2Vl
cFRpbWVNdWx0aXBsaWVyID0gMS4wIC8gc3dlZXBUaW1lVG90YWw7CiAKIHZvaWQgSW5jcmVtZW50
YWxTd2VlcGVyOjpzY2hlZHVsZVRpbWVyKCkKIHsKLSAgICBIZWFwVGltZXI6OnNjaGVkdWxlVGlt
ZXIoc3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKKyAgICBCYXNlOjpzY2hl
ZHVsZVRpbWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlwbGllcik7CiB9CiAKIElu
Y3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXApCi0gICAgOiBI
ZWFwVGltZXIoaGVhcC0+dm0oKSkKKyAgICA6IEJhc2UoaGVhcC0+dm0oKSkKICAgICAsIG1fY3Vy
cmVudEFsbG9jYXRvcihudWxscHRyKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAppbmRleCAzNGZhODhjYzJlZmE3NWM0ZjI4YzA1N2M3
ODlhNmFlMTE5ODAzYmU2Li5kZjFjZmM5MjQ5NmE3ZGE0NjYxMGVhYTJmNzU2ZmQzY2E1YWI1ZGEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
aApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1l
ci5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMzLDggKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBIZWFwOwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogCi1jbGFzcyBJbmNyZW1lbnRhbFN3
ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEluY3JlbWVudGFsU3dlZXBlciA6IHB1
YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1l
ciBCYXNlOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEluY3JlbWVudGFsU3dlZXBl
cihIZWFwKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0U3dlZXBpbmcoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVy
LmNwcAppbmRleCA2ZTMxNzZjMmNjNzZiNjg0NGMzYWZlYjA3M2M2YmNhMTNmNDVkM2NjLi45NDBk
MzlkZTI0YWNmZDMyZDk2YTRhYzIxZWQyYzJhNTMxN2MyMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCkBAIC0zMSw3ICsz
MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogU3RvcElmTmVjZXNzYXJ5VGltZXI6OlN0b3BJZk5l
Y2Vzc2FyeVRpbWVyKFZNKiB2bSkKLSAgICA6IEhlYXBUaW1lcih2bSkKKyAgICA6IEJhc2Uodm0p
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5l
Y2Vzc2FyeVRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3Nh
cnlUaW1lci5oCmluZGV4IGE2ODMxODQ3NDg5Yzg2YzM2YjY4OWUxOGRhMDQ4NjNhMWU0ZWU0NDUu
LmZlYmY1MTZhZjU0ODRiMGNiZDA4MDZkNGNjMzQ5ZDk3NDk3YmYyNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaApAQCAtMjUsMTQg
KzI1LDE1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5j
bHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7
CiAKLWNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFz
cyBTdG9wSWZOZWNlc3NhcnlUaW1lciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6
CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1lciBCYXNlOwogICAgIGV4cGxpY2l0IFN0b3BJZk5l
Y2Vzc2FyeVRpbWVyKFZNKik7CiAgICAgCiAgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggMjY1YTdjYThhMzU1ODc5YTBhOTIwZWU2ZWQzMTRkZWJkZGZh
ZWNmNS4uOWUzMDRhYjE4NTAwNTJjMDYwY2MxMjFhNzYzMTdiY2M0NjBkZjY3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTczLDcgKzczLDcgQEAKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMu
aCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtUGxhbklu
bGluZXMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAj
aW5jbHVkZSA8bWF0aC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSdW5Mb29wVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNS
dW5Mb29wVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YWUxNTMwODYxYmU2YjI0YzdiZWNmMjczMzAy
MmRhYzJjNDY4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1J1bkxvb3BUaW1lci5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKworI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxs
YmFjay5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisK
KyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDxnbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpT
QyB7CisKKyNpZiBVU0UoQ0YpCisKK2NvbnN0IENGVGltZUludGVydmFsIEpTUnVuTG9vcFRpbWVy
OjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOworCitKU1J1bkxvb3BUaW1lcjo6
SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorOiBtX3ZtKHZtKQorLCBtX2FwaUxvY2soJnZtLT5hcGlM
b2NrKCkpCit7CisgICAgc2V0UnVuTG9vcCh2bS0+aGVhcC5ydW5Mb29wKCkpOworfQorCit2b2lk
IEpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5Mb29wKQoreworICAg
IGlmIChtX3J1bkxvb3ApIHsKKyAgICAgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29w
LmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgICAgICBD
RlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90aW1lci5nZXQoKSk7CisgICAgICAgIG1fcnVuTG9v
cC5jbGVhcigpOworICAgICAgICBtX3RpbWVyLmNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKHJ1
bkxvb3ApIHsKKyAgICAgICAgbV9ydW5Mb29wID0gcnVuTG9vcDsKKyAgICAgICAgbWVtc2V0KCZt
X2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BUaW1lckNvbnRleHQpKTsKKyAgICAgICAgbV9j
b250ZXh0LmluZm8gPSB0aGlzOworICAgICAgICBtX3RpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BU
aW1lckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAs
IEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsKKyAgICAgICAgQ0ZS
dW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29w
Q29tbW9uTW9kZXMpOworICAgIH0KK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1l
cigpCit7CisgICAgc2V0UnVuTG9vcCgwKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6dGlt
ZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQoreworICAgIEpT
UnVuTG9vcFRpbWVyKiB0aW1lciA9IHN0YXRpY19jYXN0PEpTUnVuTG9vcFRpbWVyKj4oY29udGV4
dFB0cik7CisgICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOworCisgICAgUmVmUHRyPFZNPiB2
bSA9IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7CisgICAgaWYgKCF2bSkgeworICAgICAgICAvLyBU
aGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAg
ICAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7CisgICAgICAg
IHRpbWVyLT5kb1dvcmsoKTsKKyAgICB9CisKKyAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2so
KTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2
YWxJblNlY29uZHMpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1l
ci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7
CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNh
bmNlbFRpbWVyKCkKK3sKKyAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVy
LmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHNfZGVjYWRlKTsKKyAgICBtX2lz
U2NoZWR1bGVkID0gZmFsc2U7Cit9CisKKyNlbGlmIFVTRShHTElCKQorCitjb25zdCBsb25nIEpT
UnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOworCitzdGF0
aWMgR1NvdXJjZUZ1bmNzIEpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25zID0geworICAgIG51
bGxwdHIsIC8vIHByZXBhcmUKKyAgICBudWxscHRyLCAvLyBjaGVjaworICAgIC8vIGRpc3BhdGNo
CisgICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5jIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0
YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsYmFjayh1c2VyRGF0YSk7
CisgICAgfSwKKyAgICBudWxscHRyLCAvLyBmaW5hbGl6ZQorICAgIG51bGxwdHIsIC8vIGNsb3N1
cmVfY2FsbGJhY2sKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX21hcnNoYWxsCit9OworCitKU1J1
bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorOiBtX3ZtKHZtKQorLCBtX2FwaUxv
Y2soJnZtLT5hcGlMb2NrKCkpCissIG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmSlNS
dW5Mb29wVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpKQoreworICAgIGdf
c291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCksICJbSmF2YVNjcmlwdENvcmVdIEpTUnVuTG9v
cFRpbWVyIik7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdw
b2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8mIHJ1bkxvb3BUaW1l
ciA9ICpzdGF0aWNfY2FzdDxKU1J1bkxvb3BUaW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUocnVuTG9vcFRpbWVyLm1fdGltZXIuZ2V0KCksIGdfZ2V0X21v
bm90b25pY190aW1lKCkgKyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NF
Qyk7CisgICAgICAgIHJ1bkxvb3BUaW1lci50aW1lckRpZEZpcmUoKTsKKyAgICAgICAgcmV0dXJu
IEdfU09VUkNFX0NPTlRJTlVFOworICAgIH0sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNl
X2F0dGFjaChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQo
KSk7Cit9CisKK0pTUnVuTG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIGdfc291
cmNlX2Rlc3Ryb3kobV90aW1lci5nZXQoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnRp
bWVyRGlkRmlyZSgpCit7CisgICAgbV9hcGlMb2NrLT5sb2NrKCk7CisKKyAgICBpZiAoIW1fYXBp
TG9jay0+dm0oKSkgeworICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3
ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KG1fdm0pOworICAgICAgICBkb1dvcmsoKTsKKyAgICB9CisKKyAgICBtX2FwaUxvY2stPnVubG9j
aygpOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRl
cnZhbEluU2Vjb25kcykKK3sKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdl
dCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VTRUNf
UEVSX1NFQyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNSdW5Mb29w
VGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3Rp
bWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVS
X1NFQyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorI2Vsc2UKK0pTUnVuTG9vcFRp
bWVyOjpKU1J1bkxvb3BUaW1lcihWTSogdm0pCis6IG1fdm0odm0pCit7Cit9CisKK0pTUnVuTG9v
cFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpp
bnZhbGlkYXRlKCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVUaW1lcihk
b3VibGUpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKK30K
KyNlbmRpZgorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2VjYjljYmM0M2I4MGQz
MWVmOGI2YjA0OWMxN2VmNWFjNGZjYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoQ0YpCisj
aW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgorCisjaWYg
VVNFKEdMSUIpCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0xvY2s7CitjbGFzcyBWTTsKKworY2xhc3MgSlNSdW5Mb29w
VGltZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNSdW5Mb29wVGltZXI+IHsKK3B1
YmxpYzoKKyAgICBKU1J1bkxvb3BUaW1lcihWTSopOworI2lmIFVTRShDRikKKyAgICBzdGF0aWMg
dm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKTsKKyNlbmRpZgorCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNSdW5Mb29wVGltZXIoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZG9Xb3JrKCkgPSAwOworCisgICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRvdWJsZSBp
bnRlcnZhbEluU2Vjb25kcyk7CisgICAgdm9pZCBjYW5jZWxUaW1lcigpOworICAgIGJvb2wgaXNT
Y2hlZHVsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2NoZWR1bGVkOyB9CisKKyNpZiBVU0UoQ0Yp
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7Cisj
ZW5kaWYgLy8gVVNFKENGKQorCitwcm90ZWN0ZWQ6CisgICAgVk0qIG1fdm07CisKKyAgICBSZWZQ
dHI8SlNMb2NrPiBtX2FwaUxvY2s7CisgICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsK
KyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOwor
CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOworICAgIFJldGFpblB0
cjxDRlJ1bkxvb3BSZWY+IG1fcnVuTG9vcDsKKworICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBt
X2NvbnRleHQ7CisKKyAgICBMb2NrIG1fc2h1dGRvd25NdXRleDsKKyNlbGlmIFVTRShHTElCKQor
ICAgIHN0YXRpYyBjb25zdCBsb25nIHNfZGVjYWRlOworICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7
CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3RpbWVyOworI2VuZGlmCisgICAgCitwcml2YXRlOgor
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGlt
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGlt
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIwMmU2NTBjMmE2YjVlODU3NmM0NGY5NmNhNzVhYTY3NTdlNGU0
YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgorCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1ZGUg
PHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1Byb21pc2VEZWZlcnJlZFRpbWVy
OjpQcm9taXNlRGVmZXJyZWRUaW1lcihWTSYgdm0pCisgICAgOiBCYXNlKCZ2bSkKK3sKK30KKwor
dm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6ZG9Xb3JrKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3Rhc2tMb2NrKTsKKyAgICBjYW5jZWxUaW1lcigpOworICAgIHdoaWxlICghbV90YXNr
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgVGlja2V0IHRpY2tldDsKKyAgICAgICAgVGFzayB0YXNr
OworICAgICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2spID0gbV90YXNrcy50YWtlTGFzdCgpOwor
CisgICAgICAgIC8vIFdlIG1heSBoYXZlIGFscmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMu
CisgICAgICAgIGF1dG8gcHJvbWlzZSA9IG1fcGVuZGluZ1Byb21pc2VzLmZpbmQodGlja2V0KTsK
KyAgICAgICAgaWYgKHByb21pc2UgIT0gbV9wZW5kaW5nUHJvbWlzZXMuZW5kKCkpIHsKKyAgICAg
ICAgICAgIHRhc2soKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZShwcm9t
aXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2FpdGluZ1Rhc2tzID0gbV9ibG9ja2Vk
VGFza3MudGFrZSh0aWNrZXQpOworICAgICAgICBmb3IgKGNvbnN0IFRhc2smIHRhc2sgOiB3YWl0
aW5nVGFza3MpCisgICAgICAgICAgICB0YXNrKCk7CisgICAgfQorfQorCitQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6VGlja2V0IFByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJvbWlzZShK
U1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFyZ3VtZW50
QnVmZmVyPiYmIGRlcGVuZGFuY2llcykKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgVGlja2V0IHRpY2tldCA9IG5leHRUaWNrZXQoKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZCh0aWNrZXQsIHN0ZDo6bWFr
ZV90dXBsZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGFuY2llcykpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiB0aWNrZXQ7Cit9CisK
K3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKFRpY2tldCB0
aWNrZXQpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMucmVtb3ZlKHRpY2tldCk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Cit9CisKK3ZvaWQgUHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24oVGlja2V0IHRpY2tldCwgVGFzayYmIHRhc2sp
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7CisgICAgbV90YXNrcy5hcHBl
bmQoc3RkOjptYWtlX3R1cGxlKHRpY2tldCwgV1RGTW92ZSh0YXNrKSkpOworICAgIGlmICghaXNT
Y2hlZHVsZWQoKSkKKyAgICAgICAgc2NoZWR1bGVUaW1lcigwKTsKK30KKwordm9pZCBQcm9taXNl
RGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayhUaWNrZXQgYmxvY2tpbmdUaWNrZXQs
IFRhc2smJiB0YXNrKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYmxvY2tlZFRhc2tzLmFkZChibG9ja2lu
Z1RpY2tldCwgVmVjdG9yPFRhc2s+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKFdURk1vdmUodGFzaykpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRiZDNjZGE2ZjZlYjRmYzIwZTZlOTc1MDAzNGJlNmE0NGE0MjhhNjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRU
aW1lci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgi
CisjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKK2NsYXNzIFZNOworY2xhc3MgSlNDZWxsOwor
CitjbGFzcyBQcm9taXNlRGVmZXJyZWRUaW1lciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1lciBCYXNlOworCisgICAgUHJvbWlzZURl
ZmVycmVkVGltZXIoVk0mKTsKKworICAgIHZvaWQgZG9Xb3JrKCkgb3ZlcnJpZGU7CisKKyAgICB0
eXBlZGVmIHVpbnQzMl90IFRpY2tldDsKKyAgICBUaWNrZXQgYWRkUGVuZGluZ1Byb21pc2UoSlNQ
cm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5kYW5jaWVzKTsK
KyAgICB2b2lkIGNhbmNlbFBlbmRpbmdQcm9taXNlKFRpY2tldCk7CisKKyAgICB0eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBUYXNrOworICAgIHZvaWQgc2NoZWR1bGVXb3JrU29vbihUaWNr
ZXQsIFRhc2smJik7CisKKyAgICAvLyBCbG9ja2VkIHRhc2tzIHNob3VsZCBvbmx5IGJlIHJlZ2lz
dGVyZWQgd2hpbGUgaG9sZGluZyB0aGUgSlMgQVBJIGxvY2suIElmIHdlIGRpZG4ndCByZXF1aXJl
IGhvbGRpbmcgdGhlCisgICAgLy8gSlMgQVBJIGxvY2sgdGhlbiB0aGVyZSBtaWdodCBiZSBhIHJh
Y2Ugd2hlcmUgdGhlIFRpY2tldCB5b3UgYXJlIHdhaXRpbmcgb24gaXMgcnVuIGJlZm9yZSB5b3Vy
IHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVkLgorICAgIC8vIE5vdGU6IEJsb2NrZWQgdGFza3Mg
YXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHBlbmRpbmcgbGlzdCBhZnRlciBiZWluZyBydW4sIHNv
IHlvdSdsbCBuZWVkIHRvIGRvIHRoYXQgeW91cnNlbGYuCisgICAgdm9pZCBzY2hlZHVsZUJsb2Nr
ZWRUYXNrKFRpY2tldCBibG9ja2luZ1RpY2tldCwgVGFzayYmKTsKKworcHJpdmF0ZToKKyAgICBU
aWNrZXQgbmV4dFRpY2tldCgpIHsgcmV0dXJuIG1fY3VycmVudFRpY2tldCsrOyB9CisKKyAgICAv
LyBtX3BlbmRpbmdQcm9taXNlcyBzaG91bGQgb25seSBiZSBtb2RpZmllZCBpZiB5b3UgYXJlIGhv
bGRpbmcgdGhlIEpTIEFQSSBsb2NrLgorICAgIEhhc2hNYXA8VGlja2V0LCBzdGQ6OnR1cGxlPEpT
UHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+Pj4+IG1fcGVuZGluZ1Byb21p
c2VzOworICAgIFRpY2tldCBtX2N1cnJlbnRUaWNrZXQgeyAwIH07CisgICAgTG9jayBtX3Rhc2tM
b2NrOworICAgIFZlY3RvcjxzdGQ6OnR1cGxlPFRpY2tldCwgVGFzaz4+IG1fdGFza3M7CisgICAg
SGFzaE1hcDxUaWNrZXQsIFZlY3RvcjxUYXNrPj4gbV9ibG9ja2VkVGFza3M7IC8vIFRpY2tldCBp
cyB0aGUgdGlja2V0IG9mIHRoZSBwcm9taXNlIHRoaXMgdGFzayBpcyB3YWl0aW5nIGZvci4KK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDA2NGRiMjA2MjYzOWNmZjI2OTlkZWYzMTQwMmZhNzc1YjdmZmE3NDAuLjdmNDJhMDA3NzQz
ZjRiYzM5NDdhY2EwNmY5ZGU2YzExZGIwODlhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRl
ICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNo
VGFibGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgpAQCAtMTAzLDYgKzEwNCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2lu
Y2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAi
V2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCkBAIC0xNzgsNiAr
MTgwLDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
dG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpu
b0NhbGxlcigpKQogICAgICwgdG9wSlNXZWJBc3NlbWJseUluc3RhbmNlKG51bGxwdHIpCisgICAg
LCB3YXNtV29ya2xpc3Qoc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpXb3JrbGlzdD4oKnRoaXMpKQor
ICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJy
ZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVm
YXVsdCA/IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0
cmluZ1RhYmxlKQogICAgICwgcHJvcGVydHlOYW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0
KG5ldyBBcmdMaXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMTQ0MDg2ZDk3
NDAxOTcwYmFlNjFjMjFkZjM3ZTdjMWZlN2JmNTZmZS4uYjVmZmNlMGMxMDhmOGE4Y2I0OTQ2YjQ5
ZDU3M2YxOWU3YzhhYjE0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYs
NiArMTA2LDcgQEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7
CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwor
Y2xhc3MgUHJvbWlzZURlZmVycmVkVGltZXI7CiBjbGFzcyBSZWdFeHBDYWNoZTsKIGNsYXNzIFJl
Z2lzdGVyOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CkBAIC0xNTYsNiArMTU3LDcgQEAg
Y2xhc3MgU2lnbmF0dXJlOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIG5hbWVzcGFjZSBXYXNt
IHsKIGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uOworY2xhc3MgV29ya2xpc3Q7CiB9CiAjZW5k
aWYKIApAQCAtMzc4LDcgKzM4MCw5IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAgICAgc3RkOjpvbmNlX2ZsYWcgbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNlRmxhZzsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb24+IG1fd2FzbVNp
Z25hdHVyZUluZm9ybWF0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpXb3JrbGlzdD4g
d2FzbVdvcmtsaXN0OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VEZWZlcnJl
ZFRpbWVyPiBwcm9taXNlRGVmZXJyZWRUaW1lcjsKICAgICAKICAgICBKU0NlbGwqIGN1cnJlbnRs
eURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjdXJyZW50
bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCBmY2RjOGNkZGM0ZGE2OGRkOWRjZTE5
OTBkOWQ5OTEyZWRkMjlkNjY4Li5iYjczNDMwY2Y2OWNlMDQ5Yzk3OTQxMTdmMjJjNjhhNDc4ZDJl
YmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcApA
QCAtMzMsMTAgKzMzLDE2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TW9kdWxlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJQcm9t
aXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2Fz
bVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgog
Cit1c2luZyBKU0M6Oldhc206OlBsYW47CisKIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNXZWJBc3NlbWJseSk7CkBAIC00NSw0NSAr
NTEsMTczIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0
ZUZ1bmMoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgQ2F0Y2hTY29wZSYgY2F0Y2hTY29wZSwg
SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UpCit7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIGNh
dGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnBy
b21pc2UoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlD
b21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyB0cnVseSBhc3lu
Y2hyb25vdXM6Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjAxNgotICAgIEpTVmFsdWUgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIGlmIChFeGNl
cHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgY2F0
Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywg
ZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9t
aXNlLT5wcm9taXNlKCkpOwotICAgIH0KKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9
IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBWZWN0b3I8U3Ry
b25nPEpTQ2VsbD4+IGRlcGVuZGFuY2llczsKKyAgICBkZXBlbmRhbmNpZXMuYXBwZW5kKFN0cm9u
ZzxKU0NlbGw+KHZtLCBwcm9taXNlKSk7CisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8
SlNDZWxsPih2bSwgZ2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB0aWNrZXQgPSB2bS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRh
bmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBz
b3VyY2UuZ2V0KCksIFBsYW46OlZhbGlkaWF0aW9uLCBbc291cmNlLCB0aWNrZXQsIHByb21pc2Us
IGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAgICBSZWY8UGxhbj4gcGxh
biA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURlZmVycmVkVGltZXIt
PnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbc291cmNlLCBwcm9taXNlLCBnbG9iYWxPYmplY3Qs
IHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFZNJiB2bSA9
IHBsYW4tPnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxlID0gSlNXZWJBc3NlbWJseU1vZHVs
ZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVy
ZSgpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOworICAgICAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBw
cm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICBw
cm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgICAgICBwcm9taXNlLT5yZXNv
bHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIHZtLndhc21X
b3JrbGlzdC0+ZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9CiAKK2VudW0gY2xhc3MgUmVzb2x2ZSB7IFdpdGhJ
bnN0YW5jZSwgV2l0aE1vZHVsZUFuZEluc3RhbmNlIH07CitzdGF0aWMgdm9pZCByZXNvbHZlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBS
ZXNvbHZlIGVudHJpZXMpCit7CisgICAgaWYgKGVudHJpZXMgPT0gUmVzb2x2ZTo6V2l0aEluc3Rh
bmNlKQorICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
OworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUpOworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5z
dGFuY2UiKSksIGluc3RhbmNlKTsKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1
bHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFJlc29sdmUgZW50cmllcykKK3sKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgLy8gSW4gb3JkZXIg
dG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUuIFdlIGZpcnN0IGFsbG9j
YXRlIGl0cyBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRv
CisgICAgLy8gZ2VuZXJhdGluZyBhbnkgY29kZS4gSWYgd2UgZGlkbid0IGRvIHRoaXMgd2UgbWln
aHQgY2hvb3NlIHRvIGNvbXBpbGUgd2l0aCBTaWduYWxpbmcgbWVtb3J5IGJ1dCBhY3R1YWxseSBn
ZXQgYSBCb251ZHMgQ2hlY2tpbmcKKyAgICAvLyBtZW1vcnkgdGhlbiBoYXZlIHRvIHJlY29tcGls
ZS4KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJv
bWlzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUg
cG9zc2libGUgY2FzZXM6CisgICAgLy8gMSkgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGlu
aXRpYWxpemVkIENvZGVCbG9jaywgc28gd2UgaGF2ZSBubyBtb3JlIHdvcmsgdG8gZG8uCisgICAg
Ly8gMikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBv
bmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBh
bHJlYWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywgc28gc29tZW9uZSBlbHNlIGlz
IGNvbXBpbGluZyBjb2RlIGFuZCB3ZSBqdXN0IG5lZWQgdG8gd2FpdCBmb3IgdGhlbS4KKworICAg
IGJvb2wgaGFzQ29kZUJsb2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygpOworCisgICAgaWYgKGhh
c0NvZGVCbG9jayAmJiBpbnN0YW5jZS0+Y29kZUJsb2NrKCktPmluaXRpYWxpemVkKCkpIHsKKyAg
ICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmll
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
IGRlcGVuZGFuY2llczsKKyAgICBkZXBlbmRhbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZt
LCBwcm9taXNlKSk7CisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwg
aW5zdGFuY2UpKTsKKyAgICBkZXBlbmRhbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBt
b2R1bGUpKTsKKyAgICBhdXRvIHRpY2tldCA9IHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQ
ZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGFuY2llcykpOworCisgICAgaWYg
KGhhc0NvZGVCbG9jaykgeworICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1
bGVCbG9ja2VkVGFzayhpbnN0YW5jZS0+Y29kZUJsb2NrKCktPnRpY2tldCgpLCBbJnZtLCBwcm9t
aXNlLCBpbnN0YW5jZSwgbW9kdWxlLCB0aWNrZXQsIGVudHJpZXNdICgpIHsKKyAgICAgICAgICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAg
ICAgICAgaWYgKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCktPmluaXRpYWxpemVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBiZWNhdXNlIHdlIHJhbiBvdXQgb2YgbWVt
b3J5LgorICAgICAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJl
c29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXMpOworCisg
ICAgICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2Uo
dGlja2V0KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnN0
YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHRpY2tldCk7CisKKyAgICAvLyBGSVhN
RTogVGhpcyByZXBhcnNlcyB0aGUgbW9kdWxlIGhlYWRlciwgd2hpY2ggc2hvdWxkbid0IGJlIG5l
Y2Vzc2FyeS4KKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbW9k
dWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFt0aWNrZXQsIHByb21pc2UsIGluc3Rh
bmNlLCBtb2R1bGUsIGVudHJpZXNdIChQbGFuJiBwKSB7CisgICAgICAgIFJlZjxQbGFuPiBwbGFu
ID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+
c2NoZWR1bGVXb3JrU29vbih0aWNrZXQsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBwbGFu
ID0gV1RGTW92ZShwbGFuKSwgZW50cmllc10gKCkgeworICAgICAgICAgICAgVk0mIHZtID0gcGxh
bi0+dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT5pbml0
aWFsaXplKHZtLCBwbGFuKTsKKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewor
ICAgICAgICAgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXNvbHZlKHZtLCBl
eGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzKTsKKyAgICAgICAgfSk7Cisg
ICAgfSkpOworCisgICAgaWYgKGluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkpCisgICAgICAg
IHBsYW4tPnNldE1lbW9yeShtYWtlUmVmKGluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCkpKTsK
KworICAgIHZtLndhc21Xb3JrbGlzdC0+ZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKK30KKworc3Rh
dGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
U1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0KiBpbXBv
cnRPYmplY3QpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKHZtLCBleGVjLCBidWZmZXIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7
CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CisKKyAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGFuY2llczsKKyAgICBkZXBlbmRh
bmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBwcm9taXNlKSk7CisgICAgZGVwZW5kYW5j
aWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2JqZWN0KSk7CisgICAgYXV0byB0
aWNrZXQgPSB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlz
ZSwgV1RGTW92ZShkZXBlbmRhbmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRS
ZWYoKm5ldyBQbGFuKHZtLCBzb3VyY2UuZ2V0KCksIFBsYW46OlZhbGlkaWF0aW9uLCBbc291cmNl
LCB0aWNrZXQsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkg
bXV0YWJsZSB7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAg
cGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbih0aWNrZXQs
IFtzb3VyY2UsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RG
TW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
ICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcHJvbWlzZS0+c3RydWN0dXJlKCktPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBnbG9iYWxPYmplY3Qt
PldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShw
bGFuKSk7CisgICAgICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAg
ICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5zdGFudGlhdGUodm0sIGV4ZWMsIHBy
b21pc2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBSZXNvbHZlOjpXaXRoTW9kdWxlQW5kSW5zdGFu
Y2UpOworICAgICAgICB9KTsKKyAgICB9KSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIEFQSSB0cnVseSBhc3luY2hy
b25vdXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKLQog
ICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBhdXRvIHJlamVjdCA9
IFsmXSAoKSB7Ci0gICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNl
cHRpb24oKTsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgIGNhdGNoU2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlv
bi0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJv
bWlzZSgpKTsKLSAgICB9OwotCiAgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFy
Z3VtZW50KDEpOwogICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5n
ZXRPYmplY3QoKTsKICAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWlt
cG9ydE9iamVjdCkgewpAQCAtOTMsMjkgKzIyNywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9
CiAKICAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBK
U1ZhbHVlIG1vZHVsZTsKLSAgICBib29sIGZpcnN0QXJndW1lbnRJc01vZHVsZSA9IGZhbHNlOwot
ICAgIGlmIChmaXJzdEFyZ3VtZW50LmluaGVyaXRzKHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpp
bmZvKCkpKSB7Ci0gICAgICAgIGZpcnN0QXJndW1lbnRJc01vZHVsZSA9IHRydWU7Ci0gICAgICAg
IG1vZHVsZSA9IGZpcnN0QXJndW1lbnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbW9kdWxlID0g
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGZpcnN0QXJn
dW1lbnQsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdCgpOwotICAgIH0KLQotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UgPSBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNl
KGV4ZWMsIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4obW9kdWxlKSwgaW1wb3J0T2JqZWN0
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1
cmUoKSk7Ci0gICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBy
ZWplY3QoKTsKLQotICAgIGlmIChmaXJzdEFyZ3VtZW50SXNNb2R1bGUpCi0gICAgICAgIHByb21p
c2UtPnJlc29sdmUoZXhlYywgaW5zdGFuY2UpOwotICAgIGVsc2UgewotICAgICAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJt
b2R1bGUiKSksIG1vZHVsZSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5jZSIpKSwgaW5zdGFuY2Up
OwotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7Ci0gICAgfQorICAgIGlm
IChhdXRvKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2bSwg
Zmlyc3RBcmd1bWVudCkpCisgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBt
b2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0aEluc3RhbmNlKTsKKyAgICBlbHNlCisg
ICAgICAgIGNvbXBpbGVBbmRJbnN0YW50aWF0ZSh2bSwgZXhlYywgcHJvbWlzZSwgZmlyc3RBcmd1
bWVudCwgaW1wb3J0T2JqZWN0KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlz
ZS0+cHJvbWlzZSgpKTsKIH0KQEAgLTEyOSw3ICsyNDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBz
aXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFs
dWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBXYXNtOjpQ
bGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFdhc206OlBs
YW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgUGxhbjo6VmFsaWRpYXRp
b24sIFtdIChQbGFuJikgeyB9KTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJv
dyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwg
T09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYw
MTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IDQ1ZDBjZDk3NTVhYTRlZjI1NTdjYjJhYmNkNTli
YjRhODA0NmE2OTMuLmI4YzdkMWFlYWU5OTE1OGJmMTY0NjcwOTNhNjFhYzEwOGYxN2ZkNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5o
IgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtMzksMTQgKzQwLDE4IEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlN
ZW1vcnk7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisKIGNsYXNzIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2Fz
bTo6V2FzbUV4aXRTdHVicz4mJiBleGl0U3R1YnMsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1
bnNpZ25lZCBjYWxsZWVDb3VudCkKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIFdhc206Ok1lbW9yeTo6
TW9kZSBtb2RlLCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6VGlja2V0IHRpY2tldCwgdW5zaWduZWQg
Y2FsbGVlQ291bnQpCiAgICAgewotICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9u
U2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgc3Rk
Ojpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJk
PFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhpdFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291
bnQpOworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3Vu
dCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgbW9kZSwgdGlja2V0LCBjYWxs
ZWVDb3VudCk7CiAgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTU2LDEwICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCisgICAg
dm9pZCBpbml0aWFsaXplKFZNJiB2bSwgV2FzbTo6UGxhbiYpOworCiAgICAgdW5zaWduZWQgZnVu
Y3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7
IH0KICAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
dWxlLmdldCgpOyB9Ci0gICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7
CisgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAg
Ym9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KKyAgICBQ
cm9taXNlRGVmZXJyZWRUaW1lcjo6VGlja2V0IHRpY2tldCgpIGNvbnN0IHsgQVNTRVJUKCFpbml0
aWFsaXplZCgpKTsgcmV0dXJuIG1fdGlja2V0OyB9CiAKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7CkBAIC04OSwxMCArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywgY2Fs
bGVlKTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNh
bGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0
T2ZDYWxsZWVzKCkpOwotICAgIH0KKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxl
ZT4qIGNhbGxlZXMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVl
cygpKTsgfQogCiAgICAgdm9pZCogd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBp
bXBvcnRJbmRleCkKICAgICB7CkBAIC0xMDEsNyArMTA3LDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1v
ZHVsZSosIEJhZzxDYWxsTGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYm
LCBXYXNtOjpNZW1vcnk6Ok1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdhc206Ok1lbW9yeTo6
TW9kZSwgUHJvbWlzZURlZmVycmVkVGltZXI6OlRpY2tldCB0aWNrZXQsIHVuc2lnbmVkIGNhbGxl
ZUNvdW50KTsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CkBAIC0xMjUsNyArMTMxLDEwIEBAIHByaXZhdGU6CiAgICAgVW5jb25kaXRpb25hbEZpbmFs
aXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9j
YWxsTGlua0luZm9zOwogICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0
U3R1YnM7CisgICAgYm9vbCBtX2luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAgICBXYXNtOjpNZW1v
cnk6Ok1vZGUgbV9tb2RlOworICAgIC8vIFRoZSB0aWNrZXQgdGhhdCB3YXMgdXNlZCBmb3IgdGhl
IGNvbXBpbGF0aW9uIHRoaXMgY29kZSBibG9jay4KKyAgICBQcm9taXNlRGVmZXJyZWRUaW1lcjo6
VGlja2V0IG1fdGlja2V0OwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3YTY3MjlhNzFmYmRmMDUx
NzRhMWNjYzExYTU2ZjYyNzFkY2ViYy4uOTlmZDk1YzgzNDQwNTBmNGM5YWUyMjVkYTZkMDZiZDU2
NDY0NDRjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjYw
LDYgKzI2MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAgdWlu
dDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5z
aXplKCk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNWE5YTc3
YTg3Y2RmNWMxNWRhZjI3MTg2YWFjZTUzMWZmZGFkMjZkZi4uYjg4MjFlNzU4MjVmMzQwN2VhMDk1
ZjIyZDFjMzIzNzZkODc0NWJkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTU0LDIyICs1NCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVCghKnRoaXMpOwogICAgIH0KIAotICAgIE1lbW9yeUluZm9ybWF0aW9uKFZN
JiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1l
bW9yeTo6TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9uKFZNJiwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsKIAog
ICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAg
UGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KLSAgICBib29s
IGhhc1Jlc2VydmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsgfQot
ICAgIFJlZlB0cjxNZW1vcnk+IHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgQVNTRVJUKGhhc1Jlc2Vy
dmVkTWVtb3J5KCkpOyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeS5yZWxlYXNlKCk7IH0KLSAgICBN
ZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJ
bXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKLSAg
ICBSZWZQdHI8TWVtb3J5PiBtX3Jlc2VydmVkTWVtb3J5OwogICAgIFBhZ2VDb3VudCBtX2luaXRp
YWwgeyB9OwogICAgIFBhZ2VDb3VudCBtX21heGltdW0geyB9OwotICAgIE1lbW9yeTo6TW9kZSBt
X21vZGUgeyBNZW1vcnk6Ok1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgYm9vbCBtX2lzSW1w
b3J0IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAppbmRleCAxYThkM2RjZWU2MmQ1ODYwOTUxZTg2ZTBhNTUwZjgwMjk1NDBhZTIzLi5jZmI3YzVh
YTMxOWQ5YTc1NjBiMTk3MDUzMzBjODliMTVkZmNlMjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFM
b2cuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KLSNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUwLDMwICs0OSw0NSBAQAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwotICAgIAotUGxhbjo6UGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpCi0gICAg
OiBQbGFuKHZtLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKQorCitQbGFuOjpQbGFuKFZN
JiB2bSwgUmVmUHRyPEFycmF5QnVmZmVyPiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQorICAgIDogUGxhbih2bSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oc291cmNlLT5kYXRhKCkpLCBzb3VyY2UtPmJ5dGVMZW5ndGgoKSwgd29yaywgV1RGTW92ZSh0
YXNrKSkKK3sKK30KKworUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiBzb3VyY2Us
IEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKHZtLCBz
b3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQogewogfQog
Ci1QbGFuOjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNl
TGVuZ3RoKQorUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90
IHNvdXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAg
ICA6IG1fdm0odm0pCisgICAgLCBtX2NvbXBsZXRpb25UYXNrKHRhc2spCiAgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VMZW5ndGgpCisgICAgLCBtX2Fz
eW5jV29yayh3b3JrKQoreworfQorCit2b2lkIFBsYW46OmZhaWwoU3RyaW5nJiYgZXJyb3JNZXNz
YWdlKQogeworICAgIG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAg
IG1vdmVUb1N0YXRlKFN0YXRlOjpGYWlsZWQpOworICAgIG1fY29tcGxldGlvblRhc2soKnRoaXMp
OwogfQogCiBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxN
ZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3Rh
dGU6OkluaXRpYWwpOwogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2ZXJi
b3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAgICBzdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAgICAgICAgTW9kdWxlUGFyc2VyIG1v
ZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIHJlY29tcGlsZU1vZGUp
OworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKCZtX3ZtLCBtX3NvdXJjZSwgbV9z
b3VyY2VMZW5ndGgsIHJlY29tcGlsZU1vZGUpOwogICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0g
bW9kdWxlUGFyc2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAg
IGZhaWwoV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUo
cGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBAIC04OCwzNiArMTAyLDM1IEBAIGJvb2wgUGxhbjo6cGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxl
TW9kZSkKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlb
ZnVuY3Rpb25JbmRleF0uc3RhcnQ7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBt
X3NvdXJjZUxlbmd0aCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwg
c2lnbmF0dXJlSW5kZXgpOwogCi0gICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlk
YXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxp
ZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9Vbmlx
dWVkU2lnbmF0dXJlSW5kaWNlcyk7CiAgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgewog
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uU3RhcnRbaV0p
KSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5l
cnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlv
bkluZGV4KSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAgICAgICAgICAgIGZh
aWwobWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0
IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2Ug
dGhpcyBhbiBFeHBlY3RlZC4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygp
KQogICAgICAgICBkYXRhTG9nTG4oIlRvb2sgIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3Rh
cnRUaW1lKS5taWNyb3NlY29uZHMoKSwgIiB1cyB0byB2YWxpZGF0ZSBtb2R1bGUiKTsKKyAgICBt
b3ZlVG9TdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8g
V2UgYXJlIGNyZWF0aW5nIGEgYnVuY2ggb2YgdGhyZWFkcyB0aGF0IHRvdWNoIHRoZSBtYWluIHRo
cmVhZCdzIHN0YWNrLiBUaGlzIHdpbGwgbWFrZSBBU0FOIHVuaGFwcHkuCi0vLyBUaGUgcmVhc29u
IHRoaXMgaXMgT0sgaXMgdGhhdCB3ZSBndWFyYW50ZWUgdGhhdCB0aGUgbWFpbiB0aHJlYWQgZG9l
c24ndCBjb250aW51ZSB1bnRpbCBhbGwgdGhyZWFkcwotLy8gdGhhdCBjb3VsZCB0b3VjaCBpdHMg
c3RhY2sgYXJlIGRvbmUgZXhlY3V0aW5nLgotU1VQUFJFU1NfQVNBTiAKLXZvaWQgUGxhbjo6cnVu
KHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQordm9pZCBQbGFuOjpw
cmVwYXJlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQogeworICAg
IEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKICAgICBpZiAoIXBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRyYWNl
U2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2ViQXNzZW1ibHlDb21w
aWxlRW5kKTsKIAorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOwogICAg
IGlmIChyZWNvbXBpbGVNb2RlKQogICAgICAgICBBU1NFUlQobV9tb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5Lm1vZGUoKSA9PSByZWNvbXBpbGVNb2RlKTsKIApAQCAtMTI3LDcgKzE0MCw3IEBAIHZv
aWQgUGxhbjo6cnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQog
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91
Z2ggc3BhY2UgZm9yICIpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6ZSk7
CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgZmFpbChidWlsZGVyLnRv
U3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTUxLDEyNSArMTY0LDExMSBAQCB2b2lkIFBsYW46OnJ1bihzdGQ6
Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSkKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51
bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwg
aW1wb3J0LT5maWVsZCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLmF0KGlt
cG9ydC0+a2luZEluZGV4KTsKLSAgICAgICAgbV93YXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVu
ZChleGl0U3R1YkdlbmVyYXRvcihtX3ZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4
LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CisgICAgICAgIG1fd2FzbUV4aXRTdHVicy51bmNoZWNr
ZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IoJm1fdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0
dXJlSW5kZXgsIGltcG9ydEZ1bmN0aW9uSW5kZXgpKTsKICAgICB9CiAKLSAgICBtX2N1cnJlbnRJ
bmRleCA9IDA7CisgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlByZXBhcmVkKTsKK30KIAotICAgIGF1
dG8gZG9Xb3JrID0gW3RoaXNdIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAg
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgICAgIGlmIChtX2N1
cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkluZGV4ID0gbV9j
dXJyZW50SW5kZXg7Ci0gICAgICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKLSAgICAgICAg
ICAgIH0KKy8vIFdlIGRvbid0IGhhdmUgYSBzZW1hcGhvcmUgY2xhc3MuLi4gYW5kIHRoaXMgZG9l
cyBraW5kYSBpbnRlcmVzdGluZyB0aGluZ3MuCitjbGFzcyBQbGFuOjpUaHJlYWRDb3VudEhvbGRl
ciB7CitwdWJsaWM6CisgICAgVGhyZWFkQ291bnRIb2xkZXIoUGxhbiYgcGxhbikKKyAgICAgICAg
OiBtX3BsYW4ocGxhbikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5t
X2xvY2spOworICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKKyAgICB9
CiAKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSAr
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAg
ICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlb
ZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25J
bmRleF0uc3RhcnQ7Ci0gICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3Vy
Y2VMZW5ndGgpOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5j
dGlvbkluZGV4XTsKLSAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpICsg
ZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAg
ICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJ
bmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOwotCi0gICAgICAgICAgICBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KCk7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBh
cnNlQW5kQ29tcGlsZSgqbV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhd
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1
bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyk7Ci0KLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAo
IW1fZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGNvbXBp
bGVzIGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNob29zZSB0aGUg
Zmlyc3QuCi0gICAgICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhw
YXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwg
U3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhw
ZWN0ZWQuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4
ID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgIH5UaHJlYWRDb3VudEhv
bGRlcigpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2NrKTsK
KyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CiAKLSAgICAgICAgICAg
ICAgICAvLyBXZSB3aWxsIHRlcm1pbmF0ZSBvbiB0aGUgbmV4dCBleGVjdXRpb24uCi0gICAgICAg
ICAgICAgICAgY29udGludWU7IAotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIW1fcGxhbi5t
X251bWJlck9mQWN0aXZlVGhyZWFkcykKKyAgICAgICAgICAgIG1fcGxhbi5jb21wbGV0ZShsb2Nr
ZXIpOworICAgIH0KIAotICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotICAgICAgICB9Ci0g
ICAgfTsKKyAgICBQbGFuJiBtX3BsYW47Cit9OwogCi0gICAgTW9ub3RvbmljVGltZSBzdGFydFRp
bWU7Ci0gICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCi0g
ICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwordm9pZCBQbGFuOjpjb21w
aWxlRnVuY3Rpb25zKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQp
OworICAgIGlmIChtX3N0YXRlID49IFN0YXRlOjpDb21waWxlZCkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgdWludDMyX3QgdGhyZWFkQ291bnQgPSBPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkg
PyBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA6IDE7Ci0gICAgdWludDMyX3QgbnVtV29y
a2VyVGhyZWFkcyA9IHRocmVhZENvdW50IC0gMTsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmll
cj4gdGhyZWFkczsKLSAgICB0aHJlYWRzLnJlc2VydmVDYXBhY2l0eShudW1Xb3JrZXJUaHJlYWRz
KTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtV29ya2VyVGhyZWFkczsgaSsrKQot
ICAgICAgICB0aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVUaHJlYWQoImpzYy53YXNtLWIz
LWNvbXBpbGF0aW9uLnRocmVhZCIsIGRvV29yaykpOworICAgIFRocmVhZENvdW50SG9sZGVyIGhv
bGRlcigqdGhpcyk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rp
b25JbmRleDsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBmdW5jdGlvbkluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgICAgICArK21fY3VycmVu
dEluZGV4OworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKSkKKyAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6
Q29tcGlsZWQpOworICAgICAgICB9CiAKLSAgICBkb1dvcmsoKTsgLy8gTGV0IHRoZSBtYWluIHRo
cmVhZCBkbyBzb21lIHdvcmsgdG9vLgorICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4
XS5zdGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8
PSBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVu
Y3Rpb25JbmRleDsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHZh
bGlkYXRlRnVuY3Rpb24oJm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1Vu
aXF1ZWRTaWduYXR1cmVJbmRpY2VzKSk7CisKKyAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwor
ICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX3Zt
LCBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rp
b25JbmRleF0sICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNU
b1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgICAg
ICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBh
cmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZhaWwobWFrZVN0
cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5k
ZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlz
IGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jdXJyZW50SW5kZXgg
PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Xb3JrZXJUaHJl
YWRzOyBpKyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbaV0pOwor
ICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUo
KnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7CisgICAgfQorfQogCi0gICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENv
bXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlv
bkluZGV4XTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rp
b25JbmRleF07Ci0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsK
K3ZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgQVNTRVJUKG1f
Y3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAg
QVNTRVJUKCFoYXNXb3JrKCkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVk
KSB7CisgICAgICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5k
ZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykg
ewogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
bV92bSwgKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2lu
dC5jb21waWxhdGlvbiA9CisgICAgICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250
ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CisgICAgICAg
ICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpj
b250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAg
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNv
bXBpbGF0aW9uID0KICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29t
cGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlv
blslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRh
dGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCAqY29udGV4dC5qc0VudHJ5cG9pbnRK
SVQsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0Lmpz
RW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV92bSwgKmNvbnRleHQuanNFbnRyeXBv
aW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNv
bnRleHQuanNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxh
dGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAgICAgICAgICAgIG1f
d2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQu
Y29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
c1tmdW5jdGlvbkluZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVp
XSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgp
KSksIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKHZlcmJv
c2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xu
KCJUb29rICIsIChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRz
KCksCi0gICAgICAgICAgICAiIHVzIHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIG1vZHVsZSIpOwot
ICAgIH0KLQotICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5
IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAg
ICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwu
ZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxk
IGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9p
bnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJU
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21U
b1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMKLSAgICAgICAgICAgICAgICAgICAgPyBtX3dhc21FeGl0
U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4KS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKQotICAgICAgICAgICAgICAgICAgICA6IG1fd2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1
bmN0aW9uSW5kZXgpLndhc21Ub1dhc20uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldCAhPSBV
bmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMpOwotICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IG1fZmFpbGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSopPiBjYWxsYmFjaykKLXsK
LSAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rp
b25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rp
b25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgV2FzbUludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxG
dW5jdGlvbkluZGV4XS5nZXQoKTsKLQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0Vu
dHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1v
dmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKLQotICAgICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0
ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNh
bGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotCi0gICAgICAgIGNhbGxi
YWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlw
b2ludENhbGxlZSk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAg
ICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAgbV9jb21wbGV0aW9u
VGFzaygqdGhpcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAppbmRleCBkMDcwMzc1MjAzMmM5YWEwY2Q4NTg0MTdmYjE3MjZlN2ZiOWMzZGY5Li5mYTQ3ZDI5
MmZlZGY0ZDcxYWEzMTc4YzBkNzZhYzQ5NjA1ZWY4NDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsMjQgKzQzLDIzIEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7
CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQ
bGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0
aW9uPHZvaWQoUGxhbiYpPiBDb21wbGV0aW9uVGFzazsKKyAgICBlbnVtIEFzeW5jV29yayA6IHVp
bnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRpYXRpb24gfTsKKyAgICAvLyBOb3RlOiBDb21wbGV0
aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNl
IHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgUGxhbihWTSYsIEFycmF5QnVm
ZmVyJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBQbGFuKFZNJiwgVmVjdG9yPGNvbnN0IHVpbnQ4X3Q+LCBBc3luY1dvcmssIENvbXBsZXRpb25U
YXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5QbGFuKCk7CiAKLSAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRp
b25hbDxNZW1vcnk6Ok1vZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0
aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmVwYXJlKCk7CisgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKCk7CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwg
c3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJB
c3NlbWJseUNhbGxlZSopPik7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQo
KSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQotICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhaWxlZCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYpOwog
CiAgICAgVmVjdG9yPEV4cG9ydD4mIGV4cG9ydHMoKSBjb25zdAogICAgIHsKQEAgLTcxLDcgKzcw
LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJu
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKQEAgLTkyLDkgKzkx
LDM5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNtRXhpdFN0dWJzKTsK
ICAgICB9CiAKLSAgICBNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCk7IH0KKyAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KKyAgICB2b2lkIHNldE1lbW9yeShSZWZQdHI8
TWVtb3J5PiYmIG1lbW9yeSkgeyBBU1NFUlQoIWhhc01lbW9yeSgpKTsgbV9yZXNlcnZlZE1lbW9y
eSA9IFdURk1vdmUobWVtb3J5KTsgfQorICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyBB
U1NFUlQoaGFzTWVtb3J5KCkpOyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOyB9Cisg
ICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorCisgICAgZW51bSBjbGFzcyBTdGF0
ZSA6IHVpbnQ4X3QgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBWYWxpZGF0ZWQsCisgICAg
ICAgIFByZXBhcmVkLAorICAgICAgICBDb21waWxlZCwKKyAgICAgICAgRmFpbGVkLAorICAgICAg
ICBDb21wbGV0ZWQKKyAgICB9OworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVk
KCkgY29uc3QgeyByZXR1cm4gISFlcnJvck1lc3NhZ2UoKTsgfQorICAgIGJvb2wgaGFzV29yaygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhh
c0JlZW5QcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVk
OyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7CisgICAgICAgIHJldHVybiBtX2Vycm9yTWVz
c2FnZTsKKyAgICB9CiAKIHByaXZhdGU6CisgICAgY2xhc3MgVGhyZWFkQ291bnRIb2xkZXI7Cisg
ICAgZnJpZW5kIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOworCisgICAgdm9pZCBjb21wbGV0ZShj
b25zdCBMb2NrSG9sZGVyJik7CisKKyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlIHN0YXRlKSB7
IEFTU0VSVChzdGF0ZSA+IG1fc3RhdGUpOyBtX3N0YXRlID0gc3RhdGU7IH0KKyAgICB2b2lkIGZh
aWwoU3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJ
bmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBWZWN0b3I8RnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKICAgICBWZWN0b3I8U2ln
bmF0dXJlSW5kZXg+IG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUlu
ZGljZXM7CkBAIC0xMDMsMTYgKzEzMiwyMiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsK
ICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAK
LSAgICBWTSogbV92bTsKKyAgICBWTSYgbV92bTsKKyAgICBDb21wbGV0aW9uVGFzayBtX2NvbXBs
ZXRpb25UYXNrOworCisgICAgUmVmUHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBW
ZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBt
X3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBt
X2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKICAgICBMb2NrIG1f
bG9jazsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OkluaXRpYWwgfTsKKyAgICBjb25zdCBB
c3luY1dvcmsgbV9hc3luY1dvcms7CisgICAgdWludDhfdCBtX251bWJlck9mQWN0aXZlVGhyZWFk
czsKKyAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleCB7IDAgfTsKIH07CiAKKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRi
MjE1MzUzNjE4MDk1ZmVkOGI5MWIzODA3ZGU3MjU5MzY4YTllYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21QbGFu
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20geworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBQbGFu
Ojppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKK3sKKyAgICBBU1NF
UlQoIWZhaWxlZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9
IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUo
KTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKKyAgICAgICAgV2FzbUludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbklu
ZGV4XS5nZXQoKTsKKworICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRD
YWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlv
bi0+anNUb1dhc21FbnRyeXBvaW50KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2lu
dENhbGxlZSk7CisKKyAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlv
bi0+d2FzbUVudHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCB3YXNtRW50cnlwb2ludENhbGxl
ZSk7CisKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBqc0VudHJ5cG9p
bnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDUzNTlj
NjRjMDk1MzBhZjc3ZTYzMGQyYTA2YmEyMThhOTU2ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApAQCAtMCwwICsxLDE2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJXYXNtUGxhbi5oIgorCisjaW5jbHVkZSA8d3RmL051bWJlck9m
Q29yZXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgV29y
a2xpc3Q6OlRocmVhZCBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgeworcHVibGljOgor
ICAgIHR5cGVkZWYgQXV0b21hdGljVGhyZWFkIEJhc2U7CisgICAgVGhyZWFkKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrKQorICAgICAgICA6IEJhc2UobG9ja2Vy
LCB3b3JrLm1fbG9jaywgd29yay5tX3BsYW5FbnF1ZXVlZCkKKyAgICAgICAgLCB3b3JrbGlzdCh3
b3JrKQorICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92
ZUNvbXBpbGF0aW9uUGxhbihjb25zdCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBh
dXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4g
PT0gcGxhbikKKyAgICAgICAgICAgIHF1ZXVlLnBvcCgpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgYml0IHJhY3kgc2luY2Ugd2UgY291bGQgZGVxdWV1ZSBhIHZhbGlkYXRpb24g
dGFzaywgZm9sbG93ZWQgYnkgYW5vdGhlciBidXQgZW5xdWV1ZSB0aGVtIGJhY2t3YXJkcy4KKyAg
ICAvLyBUaGlzIHRlY2huaWNhbGx5IGlzbid0IGluY29ycmVjdCBidXQgaXQgbWlnaHQgY29tcGls
ZSBjb2RlIGluIGEgc3Vib3B0aW1hbCBvcmRlci4KKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIHF1
ZXVlID0gd29ya2xpc3QubV9xdWV1ZTsKKworICAgICAgICB3aGlsZSAoIXF1ZXVlLmVtcHR5KCkp
IHsKKworICAgICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS50b3AoKS5wcmlvcml0
eTsKKyAgICAgICAgICAgIGlmIChwcmlvcml0eSA9PSBXb3JrbGlzdDo6UHJpb3JpdHk6OlNodXRk
b3duKQorICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOworCisgICAgICAg
ICAgICB0aWNrZXQgPSBxdWV1ZS50b3AoKS50aWNrZXQ7CisgICAgICAgICAgICBwbGFuID0gcXVl
dWUudG9wKCkucGxhbjsKKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkubXVsdGlUaHJlYWRl
ZCgpKQorICAgICAgICAgICAgICAgIHF1ZXVlLnBvcCgpOworCisgICAgICAgICAgICBBU1NFUlQo
KHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6Q29tcGlsYXRpb24pID09IHBsYW4tPmhh
c0JlZW5QcmVwYXJlZCgpKTsKKyAgICAgICAgICAgIGlmIChwbGFuLT5oYXNXb3JrKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7CisKKyAgICAgICAgICAgIC8vIFRo
ZXJlIG11c3QgYmUgYSBhbm90aGVyIHRocmVhZCBsaW5raW5nIHRoaXMgcGxhbiBzbyB3ZSBjYW4g
ZGVxdWUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcGxhbnMuCisgICAgICAgICAgICBhdHRl
bXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4obG9ja2VyKTsKKyAgICAgICAgICAgIHBsYW4gPSBu
dWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAg
IH0KKworICAgIFdvcmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRv
IGNvbXBsZXRlID0gWyZdICgpIHsKKyAgICAgICAgICAgIHBsYW4gPSBudWxscHRyOworICAgICAg
ICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICB9OworCisgICAgICAg
IEFTU0VSVChwbGFuKTsKKyAgICAgICAgaWYgKCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgewor
ICAgICAgICAgICAgcGxhbi0+cHJlcGFyZSgpOworICAgICAgICAgICAgaWYgKCFwbGFuLT5oYXNX
b3JrKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKCk7CisKKyAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgd29ya2xp
c3QubV9xdWV1ZS5wdXNoKHsgV29ya2xpc3Q6OlByaW9yaXR5OjpDb21waWxhdGlvbiwgdGlja2V0
LCBwbGFuIH0pOworICAgICAgICAgICAgd29ya2xpc3QubV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFs
bChsb2NrZXIpOworICAgICAgICB9CisKKyAgICAgICAgcGxhbi0+Y29tcGlsZUZ1bmN0aW9ucygp
OworICAgICAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSk7CisgICAgICAgIGF0dGVtcHRUb1Jl
bW92ZUNvbXBpbGF0aW9uUGxhbihob2xkTG9jaygqd29ya2xpc3QubV9sb2NrKSk7CisgICAgICAg
IHJldHVybiBjb21wbGV0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXb3JrbGlzdCYgd29y
a2xpc3Q7CisgICAgVGlja2V0IHRpY2tldDsKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsKK307CisK
K2Jvb2wgV29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bXVsdGlUaHJlYWRlZCgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlNodXRkb3duOgorICAg
IGNhc2UgUHJpb3JpdHk6OkNvbXBpbGF0aW9uOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmVu
cXVldWUoUmVmUHRyPFBsYW4+JiYgcGxhbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9s
b2NrKTsKKworICAgIG1fcXVldWUucHVzaCh7IFByaW9yaXR5OjpDb21waWxhdGlvbiwgbmV4dFRp
Y2tldCgpLCBXVEZNb3ZlKHBsYW4pIH0pOworICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUo
bG9ja2VyKTsKK30KKworV29ya2xpc3Q6OldvcmtsaXN0KCkKKyAgICA6IG1fbG9jayhCb3g8TG9j
az46OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOjpjcmVhdGUoKSkKK3sKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFk
cyA9IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIC0gMTsgLy8gU2F2ZSBhIGNvcmUgZm9y
IHRoZSBtYWluIHRocmVhZC4KKyAgICBtX3RocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9m
Q29tcGlsYXRpb25UaHJlYWRzKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7IGkr
KykKKyAgICAgICAgbV90aHJlYWRzW2ldID0gc3RkOjptYWtlX3VuaXF1ZTxXb3JrbGlzdDo6VGhy
ZWFkPihsb2NrZXIsICp0aGlzKTsKK30KKworV29ya2xpc3Q6On5Xb3JrbGlzdCgpCit7CisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgbV9xdWV1ZS5w
dXNoKHsgUHJpb3JpdHk6OlNodXRkb3duLCBuZXh0VGlja2V0KCksIG51bGxwdHIgfSk7CisgICAg
ICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdGhyZWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV90aHJl
YWRzW2ldLT5qb2luKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5ZDNiZmZhM2MwMzk2YTZiMzIxMmNkYmRkMDk0ZGMxMmMy
NjllMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
V29ya2xpc3QuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJWTS5oIgorCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPHF1ZXVlPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOworCitjbGFzcyBXb3JrbGlzdCB7
CitwdWJsaWM6CisgICAgV29ya2xpc3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIHZvaWQg
ZW5xdWV1ZShSZWZQdHI8UGxhbj4mJik7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgVGhyZWFkOwor
ICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7CisKKyAgICB0eXBlZGVmIHVuc2lnbmVkIFRpY2tldDsK
KyAgICBUaWNrZXQgbmV4dFRpY2tldCgpIHsgcmV0dXJuIG1fbGFzdEdyYW50ZWRUaWNrZXQrKzsg
fQorCisgICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29u
ZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKKworICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgeworICAg
ICAgICBTaHV0ZG93biwKKyAgICAgICAgQ29tcGlsYXRpb24sCisgICAgICAgIFByZXBhcmF0aW9u
CisgICAgfTsKKworCisgICAgc3RydWN0IFF1ZXVlRWxlbWVudCB7CisgICAgICAgIFByaW9yaXR5
IHByaW9yaXR5OworICAgICAgICBUaWNrZXQgdGlja2V0OworICAgICAgICBSZWZQdHI8UGxhbj4g
cGxhbjsKKworICAgICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdDsKKyAgICB9OworCisg
ICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IFF1ZXVlRWxlbWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50JiByaWdodCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGxlZnQucHJpb3JpdHkgPT0gcmlnaHQucHJpb3JpdHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0OworICAg
ICAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBXVEY6OlZlY3RvciBidXQg
V1RGOjpWZWN0b3IgZG9lcyBub3Qgc3VwcG9ydCByYW5kb20gYWNjZXNzIGl0ZXJhdG9yLgorICAg
IHN0ZDo6cHJpb3JpdHlfcXVldWU8UXVldWVFbGVtZW50LCBzdGQ6OnZlY3RvcjxRdWV1ZUVsZW1l
bnQ+LCBDb21wYXJhdG9yPiBtX3F1ZXVlOworICAgIC8vIFRlY2huaWNhbGx5LCB0aGlzIGNvdWxk
IG92ZXJmbG93IGJ1dCB0aGF0J3MgdW5saWtlbHkuIEV2ZW4gaWYgaXQgZGlkLCB3ZSB3aWxsIGp1
c3QgY29tcGlsZSB0aGluZ3Mgb2YgdGhlIHNhbWUKKyAgICAvLyBQcmlvcml0eSBpdCB0aGUgd3Jv
bmcgb3JkZXIsIHdoaWNoIGlzbid0IHdyb25nLCBqdXN0IHN1Ym9wdGltYWwuCisgICAgVGlja2V0
IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEF1dG9tYXRpY1RocmVhZD4+IG1fdGhyZWFkczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCmlu
ZGV4IGIyMWY4YTVjYzY0NWYyZTI1Yjc3NDExN2JkYWY5OGFmNDcwZDM0YTEuLjQ1NTdjN2UxZmVm
OTFmMzQ5NjMyZGI1ZDIxNmU0ZmU5ZDZjMDUyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0zMSwy
OSArMzEsNTIgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRl
ICJXYXNtUGxhbklubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5m
byBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNvZGVCbG9j
ayIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNvZGVCbG9j
aykgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNh
bGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1YnMs
IFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBvd25lciwgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCBQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6VGlja2V0IHRpY2tldCwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNl
KHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2Fs
bExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJz
KFdURk1vdmUod2FzbUV4aXRTdHVicykpCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fdGlj
a2V0KHRpY2tldCkKICAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCiB7CiAgICAgbV9t
b2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7CisgICAgb3duZXItPmFkZENvZGVCbG9jayh2bSwg
dGhpcyk7CiAgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7CiB9CiAKK3ZvaWQgSlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6ZShWTSYgdm0sIFdhc206OlBsYW4mIHBsYW4pCit7
CisgICAgQVNTRVJUKCFtX2luaXRpYWxpemVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcGxhbi5o
YXNXb3JrKCkgJiYgIXBsYW4uZmFpbGVkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4ubW9k
ZSgpID09IG1vZGUoKSk7CisgICAgQVNTRVJUKHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkg
PT0gbV9jYWxsZWVDb3VudCk7CisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkpOworCisgICAgbV9jYWxsTGlua0luZm9zID0gcGxhbi50YWtlQ2FsbExpbmtJbmZv
cygpOworICAgIG1fd2FzbUV4aXRTdHVicyA9IHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKTsKKwor
ICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUo
dm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBzZXRXYXNtRW50
cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAg
ICB9KTsKKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCiB2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKIH0KIAotYm9vbCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCitib29sIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkg
Y29uc3QKIHsKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIGlmIChtb2RlKCkgPT0gV2FzbTo6TWVtb3J5OjpTaWduYWxpbmcpCiAgICAgICAgIHJl
dHVybiBtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSA9PSBtb2RlKCk7CiAgICAgcmV0dXJuIHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhl
bHBlcnMuaAppbmRleCBmMDMzMTBlYTVlMjA2MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li41
NzhhNjlmNDk4MTVhODI1MjNjMTEyOTQ4ZmJkOGVhMDkwMzVmMjAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTcz
LDYgKzczLDIyIEBAIEFMV0FZU19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVm
ZmVyVmlldyA/IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3Rvcigp
KSA6IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwog
fQogCitBTFdBWVNfSU5MSU5FIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVy
RnJvbVZhbHVlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBi
eXRlT2Zmc2V0OworICAgIHNpemVfdCBieXRlU2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0
V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRv
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVT
aXplKTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVj
KSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFz
c2VtYmx5SG9zdEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlG
dW5jdGlvbiomIHdhc21GdW5jdGlvbiwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNt
V3JhcHBlckZ1bmN0aW9uKQogewogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjppbmZvKCkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCAxYzExYjBjYTY1Yzkx
NzQyZjhlNDgxM2MyNGQ5NzVmNjVlZWJhYTE4Li44ZGMzZDEwZTIyMzQwODJjM2ZhMzA0OWEyYTRi
ZGJhZmE1NDBmMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTMyLDMxICszMiwxNSBAQAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5j
bHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKLXsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gV2UgY3JlYXRlIHN0dWIgbWVtb3JpZXMg
ZXZlbiBmb3IgbW9kdWxlcyB0aGF0IHNob3VsZCBldmVudHVhbGx5IGdldCBhIG1lbW9yeSBzbyB3
ZSB3YW50IHRvIGF2b2lkIHJlY29tcGxpbmcgdGhlcmUuCi0gICAgaWYgKG1lbW9yeS0+bWVtb3J5
KCkpIHsKLSAgICAgICAgYXV0byBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+bW9kdWxlKCktPmNv
ZGVCbG9jayh2bSwgZXhlYywgbWVtb3J5KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwpOwotICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Ci0g
ICAgfQotICAgIG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsKLX0KLQotSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCi17Ci0gICAgLy8gRklYTUU6IFRo
ZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9P
TSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSkp
KSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIHN0cnVjdHVyZSwgbW9kdWxlLT5tb2R1bGVJbmZv
cm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpOwotICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgbW9kdWxlLCBtb2R1bGVOYW1lc3BhY2VPYmplY3Qp
OwotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lkluc3RhbmNlIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5SW5zdGFuY2UpIH07CiAKIFN0
cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKQEAgLTc5
LDcgKzYzLDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIG1fZ2xvYmFscyA9IE1hbGxv
Y1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVw
b3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIAotICAgIG1fY29kZUJs
b2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jb2RlQmxvY2soKSk7CiAgICAgbV9tb2R1bGVOYW1l
c3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIHB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJleHBvcnRzIiksIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9CkBAIC0xMDEsMTAgKzg0LDI1NyBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1vZHVsZSgp
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoKnRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworfQor
Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2soVk0m
IHZtLCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6VGlja2V0IHRpY2tldCkKK3sKKyAgICBhdXRvKiBj
b2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIG1vZHVsZSgpLCBt
ZW1vcnlNb2RlKCksIHRpY2tldCwgbW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuaW50ZXJu
YWxGdW5jdGlvbkNvdW50KCkpOworICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aW5pdGlhbGl6ZWQoKSk7Cit9CisKK0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCog
aW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQoreworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKworICAgIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZv
cm1hdGlvbigpOworCisgICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikg
eworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1
bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2Jq
ZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmlt
cG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJBc3NlbWJs
eS5JbnN0YW5jZSBiZWNhdXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0aGUgV2Vi
QXNzZW1ibHkuTW9kdWxlIHJlcXVpcmVzIGltcG9ydHMiKSkpOworCisgICAgSWRlbnRpZmllciBt
b2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpE
ZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CisgICAgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUo
ZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUo
KSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNv
dWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KKyAgICBh
dXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpKSkgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0
aW9uKCkuaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSk7CisgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVO
YW1lc3BhY2UoZXhlYykpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVs
bHB0cik7CisKKyAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlh
bGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1i
bHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3Rp
dmVseS4KKyAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBl
eHRlcm5hbCB2YWx1ZXMuCisgICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0gMDsKKyAg
ICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsKKworICAgIGJvb2wgaGFzTWVtb3J5SW1w
b3J0ID0gZmFsc2U7CisgICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOworICAgIC8vIEZv
ciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgorICAgIGZvciAoYXV0byYgaW1wb3J0
IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgeworICAgICAgICAvLyAxLiBMZXQgbyBiZSB0
aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1
bGVfbmFtZSkuCisgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmpl
Y3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1
ZS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkp
OworCisgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChv
LCBpLml0ZW1fbmFtZSkKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+
Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CisgICAgICAgICAg
ICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoKKyAgICAgICAgICAgICAgICAv
LyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxhYmxl
IikpKTsKKworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09i
amVjdCo+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRl
ZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0OgorICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHdhc21GdW5jdGlvbjsKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoaXNXZWJB
c3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBw
ZXJGdW5jdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVy
ZSBvZiB2IGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmICh3YXNtRnVu
Y3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0g
d2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNt
V3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGZ1bmN0aW9uJ3Mg
c2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1bmN0aW9u
J3Mgc2lnbmF0dXJlIikpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
aWlpLiBPdGhlcndpc2U6CisgICAgICAgICAgICAgICAgLy8gYS4gTGV0IGNsb3N1cmUgYmUgYSBu
ZXcgaG9zdCBmdW5jdGlvbiBvZiB0aGUgZ2l2ZW4gc2lnbmF0dXJlIHdoaWNoIGNhbGxzIHYgYnkg
Y29lcmNpbmcgV2ViQXNzZW1ibHkgYXJndW1lbnRzIHRvIEphdmFTY3JpcHQgYXJndW1lbnRzIHZp
YSBUb0pTVmFsdWUgYW5kIHJldHVybnMgdGhlIHJlc3VsdCwgaWYgYW55LCBieSBjb2VyY2luZyB2
aWEgVG9XZWJBc3NlbWJseVZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMg
cGFydCBvZiBQbGFuIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIC8vIGl2LiBBcHBlbmQg
diB0byBmdW5jcy4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0
byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92
ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVs
b3cgKHRoZSBKU0Z1bmN0aW9uKS4KKworICAgICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRG
dW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgaW1wb3J0RnVu
Y3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlk
YXRpb24gZmFpbHVyZS4KKyAgICAgICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0
YWJsZSBpbXBvcnQpOgorICAgICAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxK
U1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIC8vIGkuIElm
IHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5
LkxpbmtFcnJvci4KKyAgICAgICAgICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJB
c3NlbWJseS5UYWJsZSIpKSk7CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZElu
aXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKKyAg
ICAgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5p
dGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0
IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4aW11bSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJn
ZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgorICAg
ICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCisgICAg
ICAgICAgICAgICAgbV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdhc206OkV4dGVy
bmFsS2luZDo6TWVtb3J5OiB7CisgICAgICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9y
eSBpbXBvcnQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9y
dCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUu
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
KTsKKyAgICAgICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3Nl
bWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBu
b3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KKyAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2Vt
Ymx5Lk1lbW9yeSIpKSk7CisKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0
ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKKyAgICAgICAg
ICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCku
aW5pdGlhbCgpOworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJ
bml0aWFsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBw
cm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAg
ICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFdhc206OlBhZ2VD
b3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQg
dGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChhY3R1YWxNYXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4
ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIg
dGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCisgICAg
ICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFtX21lbW9yeSk7CisgICAgICAgICAgICAgICAgaW5zdGFuY2Ut
Pm1fbWVtb3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xv
YmFsOiB7CisgICAgICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6Cisg
ICAgICAgICAgICAgICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhy
b3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9u
Lmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6Oklt
bXV0YWJsZSk7CisgICAgICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9iYWxfdHlwZSBvZiBp
IGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlu
a0Vycm9yLgorICAgICAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2lt
cG9ydC5raW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6STY0KQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOworICAgICAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIikpKTsKKyAgICAgICAg
ICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4K
KyAgICAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZElu
ZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNb
aW1wb3J0LmtpbmRJbmRleF0udHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFdhc206
OkkzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1w
b3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xv
YmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZl
IHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1v
cnlJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2Ug
Y3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAgICAg
ICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5OworICAgICAgICAgICAgaWYgKG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5oYXNSZXNlcnZlZE1lbW9yeSgpKQorICAgICAgICAgICAgICAgIG1l
bW9yeSA9IGpzTW9kdWxlLT50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
bWF4aW11bSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgbW9kdWxl
SW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUg
dGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc1RhYmxl
SW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsK
KyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmlu
aXRpb24uCisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3Nl
bWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFi
bGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4KKyAgICAg
ICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZl
IHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCisgICAgICAgICAgICBBU1NFUlQoIXRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHRhYmxlKTsKKyAgICAgICAgICAg
IG1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3
ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQg
Y2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCBy
ZWdpc3RlcnMuCisgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIHRoaXMsIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnko
KSkpKSk7CisgICAgfQorICAgIAorICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFTU0VS
VChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9i
YWwpOworICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7
IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFs
SW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0
aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAgICBp
ZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJ
bXBvcnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBv
cnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+
c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5p
dGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1vZHVsZVJlY29y
ZC0+bGluayhleGVjLCBpbnN0YW5jZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKyAgICAKKyAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVj
b3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0
dXJuIGluc3RhbmNlOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCAzOTNkMzczMTU4OGE4NjkwNzdhOWIzYjhiNTllYWIz
YjQ3MTljYzkwLi4xOTQ3NzI1YzNjN2VjNWIwOGE2MThjMWMzMjkyNmEzMDJiYWI2ZWY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaApAQCAtMzgsNTEgKzM4LDMxIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogCituYW1lc3Bh
Y2UgV2FzbSB7CisgICAgY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSos
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2Jq
ZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5tb2R1bGUoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4qIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsKLSAgICAgICAgcmV0dXJu
ICZpbXBvcnRGdW5jdGlvbnMoKVtpZHhdOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxKU09i
amVjdD4qIGltcG9ydEZ1bmN0aW9ucygpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Cisg
ICAgdm9pZCBhZGRVbml0aWFsaXplZENvZGVCbG9jayhWTSYsIFByb21pc2VEZWZlcnJlZFRpbWVy
OjpUaWNrZXQpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgQVNT
RVJUKGNvZGVCbG9jaygpKTsgcmV0dXJuIG1fY29kZUJsb2NrLT5tb2R1bGUoKTsgfQogCi0gICAg
dm9pZCBzZXRJbXBvcnRGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB2YWx1ZSwgdW5zaWduZWQg
aWR4KQotICAgIHsKLSAgICAgICAgaW1wb3J0RnVuY3Rpb24oaWR4KS0+c2V0KHZtLCB0aGlzLCB2
YWx1ZSk7Ci0gICAgfQorICAgIEpTQ2VsbCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7
IFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9y
dEZ1bmN0aW9ucygpW2lkeF0uZ2V0KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1l
bW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgLy8gQ2FsbGluZyB0aGlzIG1p
Z2h0IHRyaWdnZXIgYSByZWNvbXBpbGUuCi0gICAgdm9pZCBzZXRNZW1vcnkoVk0mLCBFeGVjU3Rh
dGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBK
U1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnku
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KICAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbWVtb3J5TW9k
ZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAogICAgIEpTV2ViQXNz
ZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsgbV90YWJsZS5zZXQo
dm0sIHRoaXMsIHRhYmxlKTsgfQogCiAgICAgaW50MzJfdCBsb2FkSTMyR2xvYmFsKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQogICAgIGludDY0X3QgbG9h
ZEk2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07
IH0KQEAgLTkwLDExICs3MCw2IEBAIHB1YmxpYzoKICAgICBkb3VibGUgbG9hZEY2NEdsb2JhbCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihsb2FkSTY0R2xv
YmFsKGkpKTsgfQogICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkIGksIGludDY0X3QgYml0cykg
eyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9CiAKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICog
aWR4OwotICAgIH0KLQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9yeSk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQpAQCAtMTEzLDYgKzg4LDggQEAgcHJvdGVjdGVk
OgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiogaW1wb3J0RnVu
Y3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU0NlbGw+Kj4oYml0
d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOyB9CisK
ICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCmluZGV4IDU2ZjIwYjQzNTA2OWYzZmI1ZjBiNjkxMjJjMzcyOTgxYTBjNWY1Mzku
LmRkNTQxNWU1YzlmNzY4OTQ4ODY1NGQxZjZlMDViNjg5MGVjM2I0ZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBA
IC00MiwzNSArNDIsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUp
IH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6
Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4gbW9kZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGUq
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYg
cGxhbikKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
Ly8gT24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4K
LSAgICBwbGFuLnJ1bihtb2RlKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJv
cihleGVjLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgaWYgKG1vZGUpCi0gICAgICAgIEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1v
ZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBjYWxsZWVDb3VudCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlv
bkNvdW50KCk7Ci0gICAgYXV0byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
Y3JlYXRlKHZtLCB0aGlzLCBwbGFuLnRha2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21F
eGl0U3R1YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxlZUNvdW50KTsKLQotICAgIHBsYW4uaW5pdGlh
bGl6ZUNhbGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksCi0gICAgICAgIFsm
XSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2lu
dENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAg
ICAgICAgICAgIGNvZGVCbG9jay0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRl
eCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVu
dHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7Ci0g
ICAgICAgIH0pOwotICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgQVNTRVJUKCFwbGFuLT5oYXNX
b3JrKCkpOworICAgIGF1dG8qIG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
V2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1
Y3R1cmUsIFdURk1vdmUoc291cmNlKSk7CisgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSwg
V1RGTW92ZShwbGFuKSk7CisgICAgcmV0dXJuIG1vZHVsZTsKIH0KIAotSlNXZWJBc3NlbWJseU1v
ZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUp
Cit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmFkZENvZGVCbG9jayhWTSYgdm0sIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dl
YkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7
CisgICAgYXV0byBtb2RlID0gY29kZUJsb2NrLT5tb2RlKCk7CisgICAgQVNTRVJUKCF0aGlzLT5j
b2RlQmxvY2sobW9kZSkpOworICAgIG1fY29kZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNv
ZGVCbG9jayk7CiB9CiAKIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCkBAIC03OCw2MSArNjIsMjYgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNz
ZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSkKICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fc291cmNlQnVmZmVyKHNvdXJjZS5yZWxlYXNl
Tm9uTnVsbCgpKQogewogfQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5
TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIG1lbW9yeSkKLXsKLSAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSA9IG1lbW9yeS0+
bWVtb3J5KCkubW9kZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdhc206Ok1l
bW9yeTo6TnVtYmVyT2ZNb2RlczsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja3NbaV0g
JiYgbV9jb2RlQmxvY2tzW2ldLT5pc1NhZmVUb1J1bihtZW1vcnkpKQotICAgICAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2Nrc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIW1fY29kZUJs
b2Nrc1ttb2RlXSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQg
dG8gcmVjb21waWxlLi4uCi0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3NvdXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKTsKLQotICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBw
bGFuLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQot
ICAgIEFTU0VSVChwbGFuLmV4cG9ydHMoKS5zaXplKCkgPT0gbV9leHBvcnRTeW1ib2xUYWJsZS0+
c2l6ZSgpKTsKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKGF1dG8m
IGV4cCA6IHBsYW4uZXhwb3J0cygpKQotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChleHAsIG1f
ZXhwb3J0U3ltYm9sVGFibGUtPmNvbnRhaW5zKGV4cC5maWVsZC5pbXBsKCkpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxvY2stPm1vZGUoKSk7Ci0gICAgbV9jb2RlQmxvY2tz
W21vZGVdLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwot
fQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxh
bj4mJiBwbGFuKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOwot
Ci0gICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0sIGV4ZWMsIHBsYW4pOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKLQogICAgIC8vIE9uIHN1Y2Nlc3MsIGEg
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1d
IHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9y
dFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBl
eHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi0+ZXhwb3J0
cygpKSB7CiAgICAgICAgIGF1dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0
U2NvcGVPZmZzZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAgICAgICAgZXhwb3J0U3ltYm9sVGFi
bGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxl
RW50cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsKICAgICB9CiAKLSAgICBtX3NvdXJjZUJ1ZmZlciA9
IEFycmF5QnVmZmVyOjpjcmVhdGUoc291cmNlLCBieXRlU2l6ZSk7Ci0gICAgbV9tb2R1bGVJbmZv
cm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgbV9tb2R1bGVJbmZv
cm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3lt
Ym9sVGFibGUuc2V0KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7Ci0gICAgbV9jb2RlQmxv
Y2tzW2NvZGVCbG9jay0+bW9kZSgpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXgg
NzA0MDY4YzY1ZGUxM2ViYjJiNmE4OGQ1OWJlNTZlNThlNmJiM2IwOC4uZDQ3ZWY3YjgzZTVkNTc5
Zjk5OGExMGZhZmY5NTgxMWQ0MDk2MmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNDgsMzMgKzQ4LDMzIEBAIGNs
YXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qgewog
cHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAorICAgIHN0
YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgU3RydWN0dXJlKiwgUmVm
UHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbik7CiAg
ICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRp
b24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCk7IH0KLSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnko
KSB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkudGFrZVJlc2VydmVkTWVtb3J5
KCk7IH0KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVy
biBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9u
LT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNl
KTsKICAgICB9CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBtb2R1
bGUgd2FzIG9yaWdpbmFsbHkgY29tcGlsZWQgZXhwZWN0aW5nIHRvIHVzZS4gVGhpcyB3b24ndCBu
ZWVkIHRvIHJlY29tcGlsZS4KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2so
KSB7IHJldHVybiBtX2NvZGVCbG9ja3NbbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUo
KV0uZ2V0KCk7IH0KLSAgICAvLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBjb2RlIGJsb2NrIGZv
ciB0aGUgZ2l2ZW4gbWVtb3J5LCBwb3NzaWJseSB0cmlnZ2VyaW5nIGEgcmVjb21waWxlLgotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIEpTV2Vi
QXNzZW1ibHlNZW1vcnkqKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2so
V2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttb2RlXS5nZXQo
KTsgfQorCisgICAgQXJyYXlCdWZmZXImIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
QnVmZmVyLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
YnVpbGRDb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBXYXNtOjpQbGFuJiwgc3RkOjpvcHRpb25h
bDxXYXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIGZyaWVuZCBj
bGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOworICAgIHZvaWQgYWRkQ29kZUJsb2NrKFZNJiwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayopOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYs
IFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVs
ZShWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7
CisgICAgUmVmPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgV3Jp
dGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3NbV2FzbTo6TWVtb3J5OjpO
dW1iZXJPZk1vZGVzXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGFjMzE4
MWIzZjlkY2VlNGUxMzNiMDg3ZmY3MWY0OTAxNWU0ODhkMmQuLjY0NmM4NTdmYTA3NDVjOGY1ZGJi
MzNmZWM4MjI0MThkMjg0ZmM4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApA
QCAtNzcsMjQ4ICs3Nyw2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3Rh
bmNlKGV4ZWMsIGpzTW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKSk7CiB9
CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
OjpjcmVhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpz
TW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0
dXJlKQotewotICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsK
LQotICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVjdCogZXJyb3IpIHsKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9OwotCi0gICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMg
aXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBl
RXJyb3IgaXMgdGhyb3duLgotICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUo
KSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2Ug
YmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1v
ZHVsZSByZXF1aXJlcyBpbXBvcnRzIikpKTsKLQotICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFtZShQcml2YXRlTmFtZTo6RGVzY3JpcHRpb24s
ICJXZWJBc3NlbWJseUluc3RhbmNlIikpOwotICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBt
b2R1bGVSZWNvcmQgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsIHZtLCBn
bG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtl
eSwgbW9kdWxlSW5mb3JtYXRpb24pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7Ci0KLQotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpzTW9k
dWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIC8vIExldCBmdW5jcywg
bWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUg
SmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNz
ZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgotICAgIC8vIExldCBpbXBvcnRzIGJl
IGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KLSAgICB1bnNpZ25l
ZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUltcG9ydEdsb2JhbHMg
PSAwOwotCi0gICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKLSAgICBib29sIGhhc1Rh
YmxlSW1wb3J0ID0gZmFsc2U7Ci0gICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxlLmlt
cG9ydHM6Ci0gICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRz
KSB7Ci0gICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9y
bWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KLSAgICAgICAgSlNWYWx1ZSBp
bXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5tb2R1bGUp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotICAg
ICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgot
ICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9y
dCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBl
Rm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7Ci0KLSAgICAgICAgLy8gMy4gTGV0IHYgYmUg
dGhlIHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQotICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0LmZpZWxkKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgICAg
ICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpGdW5jdGlvbjogewotICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9y
dDoKLSAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMgZmFsc2UsIHRocm93IGEg
V2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJl
IGNhbGxhYmxlIikpKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0
PEpTT2JqZWN0Kj4odmFsdWUpOwotICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0
ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHdhc21GdW5jdGlvbjsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiB3YXNtV3JhcHBlckZ1bmN0aW9uOwotICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24p
KSB7Ci0gICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90
IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3Iu
Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQotICAgICAgICAgICAgICAg
ICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbXBvcnRl
ZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsK
LSAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4K
LSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5j
dGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwotICAgICAgICAgICAg
ICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNp
Z25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidz
IHNpZ25hdHVyZSIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpaWkuIE90aGVy
d2lzZToKLSAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rp
b24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFz
c2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFu
ZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNzZW1i
bHlWYWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMgcGFydCBvZiBQbGFuIGNvbXBp
bGF0aW9uLgotICAgICAgICAgICAgLy8gaXYuIEFwcGVuZCB2IHRvIGZ1bmNzLgotICAgICAgICAg
ICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmls
bHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5j
ZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCi0KLSAg
ICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7
Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCBu
dW1JbXBvcnRGdW5jdGlvbnMrKyk7Ci0gICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0
byBpbXBvcnRzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
aGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRh
dGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFibGUg
aW1wb3J0KToKLSAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlU
YWJsZSo+KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFz
c2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAg
ICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBp
bXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKLQotICAg
ICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24udGFi
bGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7Ci0gICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0
aWFsID0gdGFibGUtPnNpemUoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhw
ZWN0ZWRJbml0aWFsKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQg
cHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAgICAgICAg
ICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0
IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4g
dGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCi0gICAgICAgICAgICAvLyBpaWku
IEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAvLyA2LiBJ
ZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNN
ZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlv
biBmYWlsdXJlLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5KTsKLSAgICAgICAgICAgIGhhc01lbW9yeUltcG9ydCA9IHRydWU7Ci0gICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlNZW1vcnkqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBX
ZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4K
LSAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkp
OwotCi0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKLSAgICAgICAgICAgIFdhc206OlBhZ2VDb3Vu
dCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7Ci0gICAgICAgICAg
ICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0
b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVk
TWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKLSAgICAgICAg
ICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCku
bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21h
eGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11bSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJn
ZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgotICAgICAgICAg
ICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBp
bnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKLSAg
ICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgotICAgICAgICAgICAgLy8g
aS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0g
ICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZElu
ZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKLSAgICAgICAgICAg
IC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBpcyBpNjQgb3IgVHlwZSh2KSBpcyBub3Qg
TnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICht
b2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6
STY0KQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgY2Fubm90
IGJlIGFuIGk2NCIpKSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVy
IikpKTsKLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIFRvV2ViQXNzZW1ibHlWYWx1ZSh2KSB0
byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gaW1wb3J0
LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6
Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyss
IHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChu
dW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChl
eGVjKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXYXNtOjpG
NjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxz
KyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNT
RVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGlmICghIW1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgewot
ICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGltcG9ydCBvciB3
ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKLSAgICAg
ICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlv
bi4KLSAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsKLSAgICAgICAgICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSkKLSAgICAg
ICAgICAgICAgICBtZW1vcnkgPSBqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVtb3J5KCk7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNy
ZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5Lm1heGltdW0oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZW1vcnkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5
KHZtLCBleGVjLAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVy
ZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHsK
LSAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpIHsKLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzVGFi
bGVJbXBvcnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkp
OwotICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdzIGEgVGFibGUgZGVm
aW5pdGlvbi4KLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBKU1dlYkFz
c2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVk
LgotICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hv
dWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBBU1NFUlQodGFibGUpOyAKLSAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJl
IHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9p
ZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVk
IHJlZ2lzdGVycy4KLSAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgSlNXZWJB
c3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCoobmV3IFdhc206Ok1lbW9yeSgp
KSkpKTsKLSAgICB9Ci0KLSAgICAvLyBHbG9iYWxzCi0gICAgewotICAgICAgICBBU1NFUlQobnVt
SW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1hdGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsK
LSAgICAgICAgZm9yIChzaXplX3QgZ2xvYmFsSW5kZXggPSBudW1JbXBvcnRHbG9iYWxzOyBnbG9i
YWxJbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHMuc2l6ZSgpOyArK2dsb2JhbEluZGV4
KSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBnbG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5n
bG9iYWxzW2dsb2JhbEluZGV4XTsKLSAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbGl6
YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOwotICAgICAgICAgICAgaWYgKGds
b2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVt
YmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEds
b2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxC
aXRzT3JJbXBvcnROdW1iZXIpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09ySW1w
b3J0TnVtYmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1vZHVsZVJlY29yZC0+bGluayhl
eGVjLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBtb2R1bGVSZWNvcmQtPmR1bXAoKTsK
LSAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5SW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305266</attachid>
            <date>2017-03-23 22:17:21 -0700</date>
            <delta_ts>2017-03-25 09:13:32 -0700</delta_ts>
            <desc>Builds</desc>
            <filename>bug-169187-20170323221720.patch</filename>
            <type>text/plain</type>
            <size>179417</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YmVhYjMwZWVhZjQwZWZiMDU5MTE0YWZhMmRiNjljNmMwZjcwNGFkLi5jMThkZDQ1ZGNmNjBjMDIy
Nzg0NzUxNTkxYTNiZTk1NTdjZDFlMWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTcgQEAKKzIwMTctMDMtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxT
d2VlcGVyOjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVy
OjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
Lmg6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHA6CisgICAgICAgIChK
U0M6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcik6CisgICAgICAg
ICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNSdW5M
b29wVGltZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFRpbWVyLmNwcC4KKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVy
KToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNldFJ1bkxvb3ApOgorICAgICAgICAo
SlNDOjpKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKToKKyAgICAgICAgKEpTQzo6SlNS
dW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSk6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVy
OjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OmNhbmNlbFRp
bWVyKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6
OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGlt
ZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5k
aW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQ
ZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hl
ZHVsZVdvcmtTb29uKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVk
dWxlQmxvY2tlZFRhc2spOgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpuZXh0VGlja2V0
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogd2FzbS9KU1dlYkFzc2VtYmx5LmNwcDoK
KyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxl
RnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGls
ZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMpOgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5oOgorICAgICAgICAqIHdhc20vSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptYXhpbXVtKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpt
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjppbnRlcm5hbEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzZXRNZW1vcnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjptb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbGVk
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzV29yayk6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46Omhhc0JlZW5QcmVwYXJlZCk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVy
cm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Om1vdmVUb1N0YXRlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdh
c20vV2FzbVdvcmtsaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0
OjpRdWV1ZUVsZW1lbnQ6Om11bHRpVGhyZWFkZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpXb3JrbGlzdCk6
CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVdvcmtsaXN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
bmV4dFRpY2tldCk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpDb21wYXJhdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAo
SlNDOjpjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1v
cnkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZVN0dWIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjphZGRD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9j
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseU1vZHVsZTo6c291cmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1vZHVsZTo6dGFrZVJlc2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UpOiBEZWxldGVkLgorCiAy
MDE3LTAzLTIyICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFtKU0NdIFVzZSBqc05vbnRyaXZpYWxTdHJpbmcgZm9yIE51bWJlciB0b1N0cmluZyBvcGVy
YXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg1ZTE4ZDU1YmQxMzhiOTE3
YTMyNTc4ODViZGVlMzkzOTQzOWUzN2YuLmNhYjk3MzFiYzk2OTNkYmZhYTQ3NDU2Y2JhMTM4MTY3
MTE4OWUxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzE2LDExICsxMzE2
LDE3IEBACiAJCTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjgxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi87IH07CiAJCTUyRjZDMzVEMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QjFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovOyB9OwogCQk1MkY2QzM1RTFF
NzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLzsgfTsK
KwkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMzFFN0ExMTQ2MDAz
QzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3
QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJ
NTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAv
KiBXYXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNt
T3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNC
MTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcwMURBQzMzRTUwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcCAqLzsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmggKi87IH07CisJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4
NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi87IH07CisJCTUzNDYzODcz
MUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyog
SlNSdW5Mb29wVGltZXIuY3BwICovOyB9OworCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyog
UHJvbWlzZURlZmVycmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5oICovOyB9OworCQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAq
LzsgfTsKIAkJNTM0ODZCQjcxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQjYxQzE3OTVD
MzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFB1YmxpYywgKTsgfTsgfTsKIAkJNTM0ODZCQkIxQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRB
cnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJNTM0
OTAyODUxQzcyNzZCNzAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ5MDI4MjFDNzI0MkM4MDAxMkJD
QjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLzsgfTsKQEAgLTEzNTUsNiArMTM2MSw3IEBACiAJ
CTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5jcHAgKi87IH07CiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5J
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CiAJCTUz
RkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAv
KiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9
OwogCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQx
MUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwpAQCAt
MTYzOCw2ICsxNjQ1LDcgQEAKIAkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTUw
RUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oICovOyB9OwogCQk5Nzg4MDE0MDE0NzFBRDkyMDA0
MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Nzg4RkMyMjE0NzFBRDBDMDA2OENFMkQgLyogSlNEYXRlTWF0aC5jcHAg
Ki87IH07CiAJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Nzg4RkMyMzE0NzFBRDBD
MDA2OENFMkQgLyogSlNEYXRlTWF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTk4MUVEODIzMjgyMzREOTFCQUVDQ0FERSAvKiBNYWNoaW5lQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjg4
MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVDb250ZXh0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTkwREE2N0YxQzhFMzE2QTAwMjk1
MTU5IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRh
dGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
MERBNjdFMUM4RTMxMUQwMDI5NTE1OSAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5
SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk5MjhGRjM5MThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAgKi87IH07CiAJ
CTk5MjhGRjNDMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyOEZGM0ExOEFDNEFFQzAwQjhD
RjEyIC8qIEpTUmVwbGF5SW5wdXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTIyMzAsOCArMjIzOCw2IEBACiAJCUMyQ0YzOUMxMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lmgg
Ki87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5
OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1
MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKLQkJQzJFNTI2QkUx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMy
RjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAx
ODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9OwogCQlDMkZDQUUxMDE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2Nr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0
NDEsNyArMjQ0Nyw2IEBACiAJCUZFRTQzRkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRo
cmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVF
NDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQy
OEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFu
ZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3Ry
aW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTk4MUVEODIzMjgyMzRE
OTFCQUVDQ0FERSAvKiBNYWNoaW5lQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjg4MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVD
b250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJ
dGVtUHJveHkgc2VjdGlvbiAqLwpAQCAtMzczMiw2ICszNzM3LDcgQEAKIAkJMjY0MDkxRkExQkUy
RkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEFpck9wY29kZS5vcGNvZGVz
OyBwYXRoID0gYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fpci9B
aXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjlENjM2RDFCRkJF
NUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTE91dHB1dC5oOyBwYXRoID0gZnRsL0ZUTE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyODgwNkUyMTE1NUU0NzhBOTNGQTdCMDIgLyogTWFjaGluZUNvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaGluZUNvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTExMTI0MzE5MkZD
RTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEN1c3RvbUdldHRlclNldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNzk3LDExICszODAzLDE3IEBACiAJCTUyQzk1MkI4MTlBMjhBMUMw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVByb2Zp
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQg
LyogV2FzbVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21X
b3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMwMzFFN0ExMTQ2
MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzAxRTcwQ0YzRDAwRjEy
QUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTUnVuTG9vcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODcy
MUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1J1bkxvb3BUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9taXNlRGVmZXJyZWRU
aW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3NjFFNzFFMDZFMDBG
MTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzQ4NkJCNjFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBl
ZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDkwMjgyMUM3MjQyQzgw
MDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gVHlwZWRBcnJheUNUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9UeXBlZEFy
cmF5Q1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg0Miw2ICszODU0
LDcgQEAKIAkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZVBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2Fz
bU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNkJG
NkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGOEQxRkYxRTgz
ODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFE
N0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzgyLDggKzQ3OTUsNiBAQAogCQlDMkNGMzlCRjE2
RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQVBJV3JhcHBl
ck9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkRBNzc4MjE4RTI1OTk5
MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGVhcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJFNTI2QkIx
NTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDM5LDcgKzUwNTAsNiBAQAogCQlGRUYwNDA1MDFB
QUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjg4MDZFMjExNTVFNDc4QTkzRkE3QjAyIC8qIE1hY2hpbmVD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hY2hpbmVDb250ZXh0
Lmg7IHBhdGggPSBNYWNoaW5lQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01ODk5LDggKzU5MDksNiBAQAogCQkJCUE1NEMy
QUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCAqLywKIAkJCQlBNTMxMUMzNDFD
NzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgKi8sCiAJCQkJQTUzMTFD
MzUxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCAqLywKLQkJCQlDMkU1
MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywKLQkJCQlDMkU1MjZCQzE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8sCiAJCQkJMEZBREU2NzIxRDREMjNCQzAw
NzY4NDU3IC8qIEhlYXBVdGlsLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1Qjcx
IC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLApAQCAtNjI2NiwxMSArNjI3NCwxNCBAQAogCQkJ
CTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0
QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNF
Njc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLywKKwkJCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjEx
MTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8sCiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2
IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBX
YXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2Fz
bVNpZ25hdHVyZS5oICovLAogCQkJCTUzRkY3RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFs
aWRhdGUuY3BwICovLAogCQkJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFsaWRh
dGUuaCAqLywKKwkJCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNw
cCAqLywKKwkJCQk1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHdhc207CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NjQyNyw2ICs2NDM4LDggQEAKIAkJCQkxNEExNTYzMDEwOTY2MzY1MDA2RkEyNjAgLyogRGF0ZUlu
c3RhbmNlQ2FjaGUuaCAqLywKIAkJCQlCQ0QyMDM0NzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVBy
b3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNEMjAzNDgwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90
b3R5cGUuaCAqLywKKwkJCQk1MzQ2Mzg3NjFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwICovLAorCQkJCTUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNl
RGVmZXJyZWRUaW1lci5oICovLAogCQkJCTE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZp
bmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRkUwNTAwRjFBQTkwOTExMDBEMzNCMzMg
LyogRGlyZWN0QXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAxMDFBQTkwOTExMDBEMzNCMzMg
LyogRGlyZWN0QXJndW1lbnRzLmggKi8sCkBAIC02ODE1LDYgKzY4MjgsOCBAQAogCQkJCTBGN0Mz
OUZDMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi8sCiAJCQkJQkNE
MjAyQkYwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNE
MjAyQzAwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5oICovLAorCQkJCTUzNDYz
ODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgKi8sCisJCQkJNTM0NjM4
NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNzBCMEE5RDAx
QTlCNjYyMDAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oICovLAogCQkJCTUyNzc3M0REMUFBRjgz
QUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgKi8sCiAJCQkJNTJDMDYxMUQxQUE1MUUxQjAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi8sCkBAIC04MTA4LDYgKzgxMjMsNyBAQAogCQkJCTBG
RUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MzBGQjMwMjFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRh
dGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyog
QjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJF
RUQ4IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjI3LDYgKzgyNDMsNyBAQAog
CQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDI5RDhERTBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxs
RnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0RkI0QTAw
MTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNC
MTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTg1
MTMsNiArODUzMCw3IEBACiAJCQkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2
IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDhFM0MxREE0MUI4
MTAwMzk0NzhGIC8qIERPTUpJVFBhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU2RjU2REUxRTY0RUFENjAwRDE3ODAxIC8qIFZNVHJhcHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzN0FEODNDMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRQYXRjaHBvaW50UGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzdBRDgzRDFEQTQ5Mjg2MDBGM0Q0MTIgLyogRE9NSklUUmVn
LmggaW4gSGVhZGVycyAqLywKQEAgLTg2ODEsNyArODY5OSw2IEBACiAJCQkJQTUzOThGQUIxQzc1
MERBNDAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0QzJB
QjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBREU2NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGls
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTMwLDYgKzkxNDcsNyBAQAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5Jbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVn
RXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2Mjkz
MDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDEx
MUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTQ5LDYg
Kzk5NjcsNyBAQAogCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzBGQjMw
NDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQzNDIyQTYyMUMxNThFNkEwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjMzOERGNTFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0RhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNDIsNiArMTAyNjEsNyBAQAog
CQkJCTE0QUQ5MTE3MURDQTk3RkQwMDE0RjlGRSAvKiBFdmFsQ29kZUJsb2NrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NzM0MUUyMURDMkNFOTYwMEFBMjlCQSAvKiBFdmFsRXhlY3V0YWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTQ5ODIwMzE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRM
b29wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNDYzODczMUU3MEQwMTUwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTFDMEZGRjFCMTk0RkQxMDBC
NTNGQ0EgLyogRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBDMTlCMUQ3NzZB
OTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTJERTBGMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTAzMTksNyArMTAzMzksNiBAQAogCQkJCUE1Mzk4RkFDMUM3NTBEQTYwMDYw
QTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0QzJBQjAxQzY1
NDRFRTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMx
MUMzNzFDNzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVy
blZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAv
KiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNFMTA3RUMzNzYwMDQyN0E0
OCAvKiBJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA2NDMsNiArMTA2NjIsNyBA
QAogCQkJCTk5MkFCQ0Y5MUJFQTlCRDIwMDY0MDNBMCAvKiBSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MkY1NkI0MUU0RTg0QTQwMDM1OTUzQiAvKiBSZW1v
dGVDb25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk5OEVENjc0
MUJFRDcwQUMwMEREODAxNyAvKiBSZW1vdGVDb250cm9sbGFibGVUYXJnZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTM0NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBS
ZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5NTU2Njg2MUU0
RThCMEYwMEFBRTEzQyAvKiBSZW1vdGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTkyRjU2QjUxRTRFODRBODAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvckNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2
aXR5Q2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxs
YmFjay5oCmluZGV4IGRkZWUyNTgzZTQ5ZTZiOTY5MzkwODBlMzM4ZWI1YTk5YzA0MGI5MmMuLmZh
N2I2NGRhOWM0MzFmN2YwMjE4MTdiYjk0YTk0OTZmMTZlYzE1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCkBAIC0yOCw3ICsyOCw3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5jbHVkZSAiSlNS
dW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBVU0UoQ0YpCkBA
IC00MCw4ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRnVsbEdDQWN0aXZpdHlDYWxs
YmFjazsKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlD
YWxsYmFjayA6IHB1YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NB
Y3Rpdml0eUNhbGxiYWNrIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0
eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgc3RhdGljIFJlZlB0cjxGdWxsR0NBY3Rp
dml0eUNhbGxiYWNrPiBjcmVhdGVGdWxsVGltZXIoSGVhcCopOwogICAgIHN0YXRpYyBSZWZQdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBjcmVhdGVFZGVuVGltZXIoSGVhcCopOwogCkBAIC03MCwyMSAr
NzEsMjEgQEAgcHJvdGVjdGVkOgogCiAjaWYgVVNFKENGKQogICAgIEdDQWN0aXZpdHlDYWxsYmFj
ayhWTSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAg
ICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxheShzX2RlY2FkZSkKICAg
ICB7CiAgICAgfQogI2VsaWYgVVNFKEdMSUIpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2
bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAg
LCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsKICAg
ICB9CiAjZWxzZQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSogdm0pCi0gICAgICAgIDogSGVh
cFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUp
CiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk2MTI4ZDAzODM4Y2E0YTc0NTUwZWQ5MTZk
Zjc3YTMyNWQ2YjQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSGVhcFRpbWVy
LmgiCi0KLSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJJbmNyZW1l
bnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNFKEdMSUIpCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgVVNFKENGKQotICAgIAot
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgSGVhcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAq
IDM2NSAqIDEwOwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0gICAgOiBtX3ZtKHZt
KQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotewotICAgIHNldFJ1bkxvb3Aodm0t
PmhlYXAucnVuTG9vcCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5M
b29wUmVmIHJ1bkxvb3ApCi17Ci0gICAgaWYgKG1fcnVuTG9vcCkgewotICAgICAgICBDRlJ1bkxv
b3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdl
dCgpKTsKLSAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7Ci0gICAgICAgIG1fdGltZXIuY2xlYXIo
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJ1bkxvb3ApIHsKLSAgICAgICAgbV9ydW5Mb29wID0g
cnVuTG9vcDsKLSAgICAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BU
aW1lckNvbnRleHQpKTsKLSAgICAgICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOwotICAgICAgICBt
X3RpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9j
b250ZXh0KSk7Ci0gICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90
aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICB9Ci19Ci0KLUhlYXBUaW1l
cjo6fkhlYXBUaW1lcigpCi17Ci0gICAgc2V0UnVuTG9vcCgwKTsKLX0KLQotdm9pZCBIZWFwVGlt
ZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29udGV4dFB0cikKLXsK
LSAgICBIZWFwVGltZXIqIHRpbWVyID0gc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4oY29udGV4dFB0
cik7Ci0gICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgUmVmUHRyPFZNPiB2bSA9
IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7Ci0gICAgaWYgKCF2bSkgewotICAgICAgICAvLyBUaGUg
Vk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgotICAgICAg
ICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7Ci0gICAgICAgIHRp
bWVyLT5kb1dvcmsoKTsKLSAgICB9Ci0KLSAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsK
LX0KLQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNv
bmRzKQotewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCks
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQot
ewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJz
b2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNhZGUpOwotICAgIG1faXNTY2hlZHVsZWQgPSBm
YWxzZTsKLX0KLQotI2VsaWYgVVNFKEdMSUIpCi0KLWNvbnN0IGxvbmcgSGVhcFRpbWVyOjpzX2Rl
Y2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOwotCi1zdGF0aWMgR1NvdXJjZUZ1bmNzIGhl
YXBUaW1lclNvdXJjZUZ1bmN0aW9ucyA9IHsKLSAgICBudWxscHRyLCAvLyBwcmVwYXJlCi0gICAg
bnVsbHB0ciwgLy8gY2hlY2sKLSAgICAvLyBkaXNwYXRjaAotICAgIFtdKEdTb3VyY2UqLCBHU291
cmNlRnVuYyBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCi0gICAgewot
ICAgICAgICByZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOwotICAgIH0sCi0gICAgbnVsbHB0ciwg
Ly8gZmluYWxpemUKLSAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCi0gICAgbnVsbHB0
ciwgLy8gY2xvc3VyZV9tYXJzaGFsbAotfTsKLQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZt
KQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKLSAgICAs
IG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmaGVhcFRpbWVyU291cmNlRnVuY3Rpb25z
LCBzaXplb2YoR1NvdXJjZSkpKSkKLXsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdl
dCgpLCAiW0phdmFTY3JpcHRDb3JlXSBIZWFwVGltZXIiKTsKLSAgICBnX3NvdXJjZV9zZXRfY2Fs
bGJhY2sobV90aW1lci5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsK
LSAgICAgICAgYXV0byYgaGVhcFRpbWVyID0gKnN0YXRpY19jYXN0PEhlYXBUaW1lcio+KHVzZXJE
YXRhKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoaGVhcFRpbWVyLm1fdGltZXIu
Z2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBIZWFwVGltZXI6OnNfZGVjYWRlICogR19V
U0VDX1BFUl9TRUMpOwotICAgICAgICBoZWFwVGltZXIudGltZXJEaWRGaXJlKCk7Ci0gICAgICAg
IHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKLSAgICB9LCB0aGlzLCBudWxscHRyKTsKLSAgICBn
X3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9k
ZWZhdWx0KCkpOwotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQotewotICAgIGdfc291cmNl
X2Rlc3Ryb3kobV90aW1lci5nZXQoKSk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZp
cmUoKQotewotICAgIG1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgaWYgKCFtX2FwaUxvY2stPnZt
KCkpIHsKLSAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KLSAgICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsK
LSAgICAgICAgZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgbV9hcGlMb2NrLT51bmxvY2soKTsKLX0K
LQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRz
KQotewotICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21v
bm90b25pY190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNFQ19QRVJfU0VDKTsKLSAg
ICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRpbWVy
KCkKLXsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9t
b25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgbV9pc1Nj
aGVkdWxlZCA9IGZhbHNlOwotfQotI2Vsc2UKLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkK
LSAgICA6IG1fdm0odm0pCi17Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci19Ci0K
LXZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNj
aGVkdWxlVGltZXIoZG91YmxlKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIo
KQotewotfQotI2VuZGlmCi0gICAgCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwVGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJi
NDcxZjYwZGI4YzYzNzRjNTUwMTk4ZDBiZTllMmZjY2E4YTZiNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdMSUIp
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBKU0xvY2s7Ci1jbGFzcyBWTTsKLQotY2xhc3MgSGVhcFRpbWVyIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEhlYXBUaW1lcj4gewotcHVibGljOgotICAgIEhlYXBUaW1l
cihWTSopOwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgdm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5M
b29wVGltZXJSZWYsIHZvaWQqKTsKLSNlbmRpZgotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgfkhlYXBUaW1lcigpOwotICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7Ci0K
LSAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKLSAgICB2
b2lkIGNhbmNlbFRpbWVyKCk7Ci0gICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTY2hlZHVsZWQ7IH0KLQotI2lmIFVTRShDRikKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKLSNlbmRpZiAvLyBVU0UoQ0YpCi0gICAgCi1w
cm90ZWN0ZWQ6Ci0gICAgVk0qIG1fdm07Ci0KLSAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7
Ci0gICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsKLSNpZiBVU0UoQ0YpCi0gICAgc3Rh
dGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOwotCi0gICAgUmV0YWluUHRyPENGUnVu
TG9vcFRpbWVyUmVmPiBtX3RpbWVyOwotICAgIFJldGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVu
TG9vcDsKLSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OwotCi0gICAg
TG9jayBtX3NodXRkb3duTXV0ZXg7Ci0jZWxpZiBVU0UoR0xJQikKLSAgICBzdGF0aWMgY29uc3Qg
bG9uZyBzX2RlY2FkZTsKLSAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOwotICAgIEdSZWZQdHI8R1Nv
dXJjZT4gbV90aW1lcjsKLSNlbmRpZgotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIGludmFsaWRh
dGUoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKaW5kZXggY2ZlODliODcwN2NlYmM3ZjRh
ZjRkNjM1NjY5NDExZTE3ZGMwYWM1Mi4uOGNiZmE5ZTgwNDBkYzYxZWZiMDE5YjIxNDU1NDQ1NWUy
ZmE4MzFiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50
YWxTd2VlcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCkBAIC00MSwxMSArNDEsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBzd2Vl
cFRpbWVNdWx0aXBsaWVyID0gMS4wIC8gc3dlZXBUaW1lVG90YWw7CiAKIHZvaWQgSW5jcmVtZW50
YWxTd2VlcGVyOjpzY2hlZHVsZVRpbWVyKCkKIHsKLSAgICBIZWFwVGltZXI6OnNjaGVkdWxlVGlt
ZXIoc3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKKyAgICBCYXNlOjpzY2hl
ZHVsZVRpbWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlwbGllcik7CiB9CiAKIElu
Y3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXApCi0gICAgOiBI
ZWFwVGltZXIoaGVhcC0+dm0oKSkKKyAgICA6IEJhc2UoaGVhcC0+dm0oKSkKICAgICAsIG1fY3Vy
cmVudEFsbG9jYXRvcihudWxscHRyKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAppbmRleCAzNGZhODhjYzJlZmE3NWM0ZjI4YzA1N2M3
ODlhNmFlMTE5ODAzYmU2Li5kZjFjZmM5MjQ5NmE3ZGE0NjYxMGVhYTJmNzU2ZmQzY2E1YWI1ZGEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
aApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1l
ci5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMzLDggKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBIZWFwOwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogCi1jbGFzcyBJbmNyZW1lbnRhbFN3
ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEluY3JlbWVudGFsU3dlZXBlciA6IHB1
YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1l
ciBCYXNlOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEluY3JlbWVudGFsU3dlZXBl
cihIZWFwKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0U3dlZXBpbmcoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVy
LmNwcAppbmRleCA2ZTMxNzZjMmNjNzZiNjg0NGMzYWZlYjA3M2M2YmNhMTNmNDVkM2NjLi45NDBk
MzlkZTI0YWNmZDMyZDk2YTRhYzIxZWQyYzJhNTMxN2MyMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCkBAIC0zMSw3ICsz
MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogU3RvcElmTmVjZXNzYXJ5VGltZXI6OlN0b3BJZk5l
Y2Vzc2FyeVRpbWVyKFZNKiB2bSkKLSAgICA6IEhlYXBUaW1lcih2bSkKKyAgICA6IEJhc2Uodm0p
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5l
Y2Vzc2FyeVRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3Nh
cnlUaW1lci5oCmluZGV4IGE2ODMxODQ3NDg5Yzg2YzM2YjY4OWUxOGRhMDQ4NjNhMWU0ZWU0NDUu
LmZlYmY1MTZhZjU0ODRiMGNiZDA4MDZkNGNjMzQ5ZDk3NDk3YmYyNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaApAQCAtMjUsMTQg
KzI1LDE1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5j
bHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7
CiAKLWNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFz
cyBTdG9wSWZOZWNlc3NhcnlUaW1lciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6
CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1lciBCYXNlOwogICAgIGV4cGxpY2l0IFN0b3BJZk5l
Y2Vzc2FyeVRpbWVyKFZNKik7CiAgICAgCiAgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggMjY1YTdjYThhMzU1ODc5YTBhOTIwZWU2ZWQzMTRkZWJkZGZh
ZWNmNS4uZmY3NDM2ZTlmOGQyODgxZjRjNjM3MzA2N2YzOTZhMDVmZDAzYTNhMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTczLDggKzczLDkgQEAKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMu
aCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtUGxhbklu
bGluZXMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0
LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC0zMTU5LDIxICszMTYwLDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBlCiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsgMikKICAgICAg
ICAgQ1JBU0goKTsKIAotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihzb3VyY2UtPnZlY3RvcigpKSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgcGxhbi5ydW4o
KTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0
byBwYXJzZSBtb2R1bGU6ICIsIHBsYW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJlZjxXYXNtOjpQ
bGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oc291cmNlLT52ZWN0b3IoKSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206OlBsYW46OkZ1
bGxDb21waWxlLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBXYXNtOjplbnN1cmVX
b3JrbGlzdCgpLmVucXVldWUobnVsbHB0ciwgbWFrZVJlZihwbGFuLmdldCgpKSk7CisgICAgcGxh
bi0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFuLT5lcnJvck1lc3Nh
Z2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgaWYgKHBsYW4uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKKyAgICBpZiAocGxhbi0+aW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0goKTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
a2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7
Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXplQ2FsbGVlcygKICAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0g
MSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChqc0VudHJ5
cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMTgzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUq
IGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjYWxsZWVJbmRleDsKICAgICAgICAgICAg
IH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9u
ID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1v
ZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSdW5Mb29wVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YWUxNTMwODYxYmU2YjI0YzdiZWNm
MjczMzAyMmRhYzJjNDY4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKworI2luY2x1ZGUgIkdDQWN0aXZp
dHlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDxnbGliLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIEpTQyB7CisKKyNpZiBVU0UoQ0YpCisKK2NvbnN0IENGVGltZUludGVydmFsIEpTUnVuTG9v
cFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOworCitKU1J1bkxvb3BU
aW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorOiBtX3ZtKHZtKQorLCBtX2FwaUxvY2soJnZt
LT5hcGlMb2NrKCkpCit7CisgICAgc2V0UnVuTG9vcCh2bS0+aGVhcC5ydW5Mb29wKCkpOworfQor
Cit2b2lkIEpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5Mb29wKQor
eworICAgIGlmIChtX3J1bkxvb3ApIHsKKyAgICAgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9y
dW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAg
ICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90aW1lci5nZXQoKSk7CisgICAgICAgIG1f
cnVuTG9vcC5jbGVhcigpOworICAgICAgICBtX3RpbWVyLmNsZWFyKCk7CisgICAgfQorCisgICAg
aWYgKHJ1bkxvb3ApIHsKKyAgICAgICAgbV9ydW5Mb29wID0gcnVuTG9vcDsKKyAgICAgICAgbWVt
c2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BUaW1lckNvbnRleHQpKTsKKyAgICAg
ICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOworICAgICAgICBtX3RpbWVyID0gYWRvcHRDRihDRlJ1
bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzX2RlY2FkZSwgc19kZWNhZGUs
IDAsIDAsIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsKKyAgICAg
ICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOworICAgIH0KK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxv
b3BUaW1lcigpCit7CisgICAgc2V0UnVuTG9vcCgwKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1l
cjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQorewor
ICAgIEpTUnVuTG9vcFRpbWVyKiB0aW1lciA9IHN0YXRpY19jYXN0PEpTUnVuTG9vcFRpbWVyKj4o
Y29udGV4dFB0cik7CisgICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOworCisgICAgUmVmUHRy
PFZNPiB2bSA9IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7CisgICAgaWYgKCF2bSkgeworICAgICAg
ICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVw
LgorICAgICAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7Cisg
ICAgICAgIHRpbWVyLT5kb1dvcmsoKTsKKyAgICB9CisKKyAgICB0aW1lci0+bV9hcGlMb2NrLT51
bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUg
aW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUo
bV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vj
b25kcyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGlt
ZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZSht
X3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHNfZGVjYWRlKTsKKyAg
ICBtX2lzU2NoZWR1bGVkID0gZmFsc2U7Cit9CisKKyNlbGlmIFVTRShHTElCKQorCitjb25zdCBs
b25nIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOwor
CitzdGF0aWMgR1NvdXJjZUZ1bmNzIEpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25zID0gewor
ICAgIG51bGxwdHIsIC8vIHByZXBhcmUKKyAgICBudWxscHRyLCAvLyBjaGVjaworICAgIC8vIGRp
c3BhdGNoCisgICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5jIGNhbGxiYWNrLCBncG9pbnRlciB1
c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsYmFjayh1c2Vy
RGF0YSk7CisgICAgfSwKKyAgICBudWxscHRyLCAvLyBmaW5hbGl6ZQorICAgIG51bGxwdHIsIC8v
IGNsb3N1cmVfY2FsbGJhY2sKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX21hcnNoYWxsCit9Owor
CitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorOiBtX3ZtKHZtKQorLCBt
X2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCissIG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25l
dygmSlNSdW5Mb29wVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpKQorewor
ICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCksICJbSmF2YVNjcmlwdENvcmVdIEpT
UnVuTG9vcFRpbWVyIik7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCks
IFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8mIHJ1bkxv
b3BUaW1lciA9ICpzdGF0aWNfY2FzdDxKU1J1bkxvb3BUaW1lcio+KHVzZXJEYXRhKTsKKyAgICAg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUocnVuTG9vcFRpbWVyLm1fdGltZXIuZ2V0KCksIGdf
Z2V0X21vbm90b25pY190aW1lKCkgKyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNf
UEVSX1NFQyk7CisgICAgICAgIHJ1bkxvb3BUaW1lci50aW1lckRpZEZpcmUoKTsKKyAgICAgICAg
cmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOworICAgIH0sIHRoaXMsIG51bGxwdHIpOworICAgIGdf
c291cmNlX2F0dGFjaChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2Rl
ZmF1bHQoKSk7Cit9CisKK0pTUnVuTG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAg
IGdfc291cmNlX2Rlc3Ryb3kobV90aW1lci5nZXQoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGlt
ZXI6OnRpbWVyRGlkRmlyZSgpCit7CisgICAgbV9hcGlMb2NrLT5sb2NrKCk7CisKKyAgICBpZiAo
IW1fYXBpTG9jay0+dm0oKSkgeworICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVk
LCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgICAgICBtX2FwaUxvY2stPnVubG9jaygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKG1fdm0pOworICAgICAgICBkb1dvcmsoKTsKKyAgICB9CisKKyAgICBtX2FwaUxvY2st
PnVubG9jaygpOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJs
ZSBpbnRlcnZhbEluU2Vjb25kcykKK3sKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3Rp
bWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBH
X1VTRUNfUEVSX1NFQyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNS
dW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGlt
ZShtX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VT
RUNfUEVSX1NFQyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorI2Vsc2UKK0pTUnVu
TG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihWTSogdm0pCis6IG1fdm0odm0pCit7Cit9CisKK0pT
UnVuTG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworfQorCit2b2lkIEpTUnVuTG9vcFRp
bWVyOjppbnZhbGlkYXRlKCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVU
aW1lcihkb3VibGUpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkK
K3sKK30KKyNlbmRpZgorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2VjYjljYmM0
M2I4MGQzMWVmOGI2YjA0OWMxN2VmNWFjNGZjYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0Uo
Q0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgor
CisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0xvY2s7CitjbGFzcyBWTTsKKworY2xhc3MgSlNS
dW5Mb29wVGltZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNSdW5Mb29wVGltZXI+
IHsKK3B1YmxpYzoKKyAgICBKU1J1bkxvb3BUaW1lcihWTSopOworI2lmIFVTRShDRikKKyAgICBz
dGF0aWMgdm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKTsKKyNlbmRp
ZgorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNSdW5Mb29wVGltZXIoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAwOworCisgICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRv
dWJsZSBpbnRlcnZhbEluU2Vjb25kcyk7CisgICAgdm9pZCBjYW5jZWxUaW1lcigpOworICAgIGJv
b2wgaXNTY2hlZHVsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2NoZWR1bGVkOyB9CisKKyNpZiBV
U0UoQ0YpCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJl
Zik7CisjZW5kaWYgLy8gVVNFKENGKQorCitwcm90ZWN0ZWQ6CisgICAgVk0qIG1fdm07CisKKyAg
ICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CisgICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFs
c2UgfTsKKyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVj
YWRlOworCisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOworICAgIFJl
dGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVuTG9vcDsKKworICAgIENGUnVuTG9vcFRpbWVyQ29u
dGV4dCBtX2NvbnRleHQ7CisKKyAgICBMb2NrIG1fc2h1dGRvd25NdXRleDsKKyNlbGlmIFVTRShH
TElCKQorICAgIHN0YXRpYyBjb25zdCBsb25nIHNfZGVjYWRlOworICAgIHZvaWQgdGltZXJEaWRG
aXJlKCk7CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3RpbWVyOworI2VuZGlmCisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgaW52YWxpZGF0ZSgpOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlYWY3ZDQ3NWViYTdiM2U5ZGI0NDI1MmExZjY1NTFl
YWNiODQ0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKKworI2luY2x1ZGUgIkpTUHJvbWlzZURl
ZmVycmVkLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK1Byb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRU
aW1lcihWTSYgdm0pCisgICAgOiBCYXNlKCZ2bSkKK3sKK30KKwordm9pZCBQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6ZG9Xb3JrKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsK
KyAgICBjYW5jZWxUaW1lcigpOworICAgIHdoaWxlICghbV90YXNrcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHRpY2tldDsKKyAgICAgICAgVGFzayB0YXNrOworICAg
ICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2spID0gbV90YXNrcy50YWtlTGFzdCgpOworCisgICAg
ICAgIC8vIFdlIG1heSBoYXZlIGFscmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMuCisgICAg
ICAgIGF1dG8gcHJvbWlzZSA9IG1fcGVuZGluZ1Byb21pc2VzLmZpbmQodGlja2V0KTsKKyAgICAg
ICAgaWYgKHByb21pc2UgIT0gbV9wZW5kaW5nUHJvbWlzZXMuZW5kKCkpIHsKKyAgICAgICAgICAg
IHRhc2soKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZShwcm9taXNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2FpdGluZ1Rhc2tzID0gbV9ibG9ja2VkVGFza3Mu
dGFrZSh0aWNrZXQpOworICAgICAgICBmb3IgKGNvbnN0IFRhc2smIHRhc2sgOiB3YWl0aW5nVGFz
a3MpCisgICAgICAgICAgICB0YXNrKCk7CisgICAgfQorfQorCit2b2lkIFByb21pc2VEZWZlcnJl
ZFRpbWVyOjphZGRQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBWZWN0
b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5kYW5jaWVzKQoreworICAgIEFTU0VSVChtX3ZtLT5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVwZW5kYW5jaWVzLnNpemUoKTsgKytpKQorICAgICAgICBBU1NFUlQoZGVwZW5kYW5j
aWVzW2ldLmdldCgpICE9IHRpY2tldCk7CisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8
SlNDZWxsPigqbV92bSwgdGlja2V0KSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1By
b21pc2VzLmFkZCh0aWNrZXQsIFdURk1vdmUoZGVwZW5kYW5jaWVzKSk7CisgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBQcm9taXNlRGVmZXJy
ZWRUaW1lcjo6Y2FuY2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqIHRpY2tldCkK
K3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBtX3BlbmRpbmdQcm9taXNlcy5yZW1vdmUodGlja2V0KTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKKworICAgIGF1dG8gYmxvY2tlZFRhc2tzID0g
bV9ibG9ja2VkVGFza3MudGFrZSh0aWNrZXQpOworICAgIGZvciAoY29uc3QgVGFzayYgdGFzayA6
IGJsb2NrZWRUYXNrcykKKyAgICAgICAgdGFzaygpOworfQorCit2b2lkIFByb21pc2VEZWZlcnJl
ZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFRhc2sm
JiB0YXNrKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGFza0xvY2spOworICAgIG1fdGFz
a3MuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZSh0aWNrZXQsIFdURk1vdmUodGFzaykpKTsKKyAgICBp
ZiAoIWlzU2NoZWR1bGVkKCkpCisgICAgICAgIHNjaGVkdWxlVGltZXIoMCk7Cit9CisKK3ZvaWQg
UHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2soSlNQcm9taXNlRGVmZXJy
ZWQqIGJsb2NraW5nVGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBBU1NFUlQobV92bS0+Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Jsb2Nr
ZWRUYXNrcy5hZGQoYmxvY2tpbmdUaWNrZXQsIFZlY3RvcjxUYXNrPigpKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNl
RGVmZXJyZWRUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURl
ZmVycmVkVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzdlYmNhNTJlNjNkMTM5NzYwNzU4MmEwZWNkZmFh
MzdiNDkzODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU1J1bkxvb3BUaW1lci5oIgorI2luY2x1ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CitjbGFzcyBW
TTsKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3MgUHJvbWlzZURlZmVycmVkVGltZXIgOiBwdWJsaWMg
SlNSdW5Mb29wVGltZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNSdW5Mb29wVGltZXIgQmFz
ZTsKKworICAgIFByb21pc2VEZWZlcnJlZFRpbWVyKFZNJik7CisKKyAgICB2b2lkIGRvV29yaygp
IG92ZXJyaWRlOworCisgICAgdm9pZCBhZGRQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJl
ZCosIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4mJiBkZXBlbmRhbmNpZXMpOworICAgIHZvaWQgY2Fu
Y2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqKTsKKworICAgIHR5cGVkZWYgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IFRhc2s7CisgICAgdm9pZCBzY2hlZHVsZVdvcmtTb29uKEpTUHJv
bWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAgIC8vIEJsb2NrZWQgdGFza3Mgc2hvdWxkIG9u
bHkgYmUgcmVnaXN0ZXJlZCB3aGlsZSBob2xkaW5nIHRoZSBKUyBBUEkgbG9jay4gSWYgd2UgZGlk
bid0IHJlcXVpcmUgaG9sZGluZyB0aGUKKyAgICAvLyBKUyBBUEkgbG9jayB0aGVuIHRoZXJlIG1p
Z2h0IGJlIGEgcmFjZSB3aGVyZSB0aGUgcHJvbWlzZSB5b3UgYXJlIHdhaXRpbmcgb24gaXMgcnVu
IGJlZm9yZSB5b3VyIHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVkLgorICAgIC8vIE5vdGU6IEJs
b2NrZWQgdGFza3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHBlbmRpbmcgbGlzdCBhZnRlciBi
ZWluZyBydW4sIHNvIHlvdSdsbCBuZWVkIHRvIGRvIHRoYXQgeW91cnNlbGYuCisgICAgdm9pZCBz
Y2hlZHVsZUJsb2NrZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworcHJpdmF0
ZToKKworICAgIC8vIG1fcGVuZGluZ1Byb21pc2VzIHNob3VsZCBvbmx5IGJlIG1vZGlmaWVkIGlm
IHlvdSBhcmUgaG9sZGluZyB0aGUgSlMgQVBJIGxvY2suCisgICAgSGFzaE1hcDxKU1Byb21pc2VE
ZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4+IG1fcGVuZGluZ1Byb21pc2VzOworICAg
IExvY2sgbV90YXNrTG9jazsKKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxKU1Byb21pc2VEZWZlcnJl
ZCosIFRhc2s+PiBtX3Rhc2tzOworICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0
b3I8VGFzaz4+IG1fYmxvY2tlZFRhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggMDY0ZGIyMDYyNjM5Y2ZmMjY5OWRlZjMx
NDAyZmE3NzViN2ZmYTc0MC4uZWZjNGY3OGNjMjMzZTVkNjM2Y2I3ODU0ZmNmMTcwYzQ3YmEzMjRi
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtODUsNiArODUsNyBAQAog
I2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlJlZ0V4cENh
Y2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCkBAIC0xMDMsNiArMTA0LDcgQEAKICNp
bmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgog
I2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5j
bHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiV2Vha01hcERhdGEuaCIKQEAgLTE3OCw2ICsxODAsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKICAg
ICAsIHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAgICAgLCB0b3BKU1dlYkFz
c2VtYmx5SW5zdGFuY2UobnVsbHB0cikKKyAgICAsIHByb21pc2VEZWZlcnJlZFRpbWVyKHN0ZDo6
bWFrZV91bmlxdWU8UHJvbWlzZURlZmVycmVkVGltZXI+KCp0aGlzKSkKICAgICAsIG1fYXRvbWlj
U3RyaW5nVGFibGUodm1UeXBlID09IERlZmF1bHQgPyB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3Ry
aW5nVGFibGUoKSA6IG5ldyBBdG9taWNTdHJpbmdUYWJsZSkKICAgICAsIHByb3BlcnR5TmFtZXMo
bnVsbHB0cikKICAgICAsIGVtcHR5TGlzdChuZXcgQXJnTGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCmluZGV4IDE0NDA4NmQ5NzQwMTk3MGJhZTYxYzIxZGYzN2U3YzFmZTdiZjU2ZmUu
Ljk2M2FhOWE4N2JmNjhmZGIwNzAyOTFjZjMzYjJlMWI1NzVkYmQyNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaApAQCAtMTA2LDYgKzEwNiw3IEBAIGNsYXNzIEpTT2JqZWN0OwogY2xh
c3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKK2NsYXNzIFByb21pc2VEZWZlcnJlZFRpbWVyOwogY2xh
c3MgUmVnRXhwQ2FjaGU7CiBjbGFzcyBSZWdpc3RlcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0OwpAQCAtMzc5LDYgKzM4MCw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9uY2VfZmxhZyBtX3dh
c21TaWduYXR1cmVJbmZvcm1hdGlvbk9uY2VGbGFnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbj4gbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb247CiAjZW5k
aWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZURlZmVycmVkVGltZXI+IHByb21pc2VEZWZl
cnJlZFRpbWVyOwogICAgIAogICAgIEpTQ2VsbCogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFj
a09iamVjdDsKICAgICBjb25zdCBDbGFzc0luZm8qIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJh
Y2tPYmplY3RDbGFzc0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9KU1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNz
ZW1ibHkuY3BwCmluZGV4IGZjZGM4Y2RkYzRkYTY4ZGQ5ZGNlMTk5MGQ5ZDk5MTJlZGQyOWQ2Njgu
Ljg0NWNmZmUzZmNkMDY0NDE1NTk5ZGVjZmE1YWUxNDQ5MzVmNTZmYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC0zMywxMCArMzMsMTYgQEAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRl
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgi
CiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKK3VzaW5nIEpTQzo6V2FzbTo6
UGxhbjsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU1dlYkFzc2VtYmx5KTsKQEAgLTQ1LDQ1ICs1MSwxNzMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVj
U3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50
aWF0ZUZ1bmMoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWplY3QoRXhl
Y1N0YXRlKiBleGVjLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlLCBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZSkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKK30KKwogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gY2F0Y2hTY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2Ci0gICAgSlNWYWx1
ZSBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
Y2F0Y2hTY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0g
ICAgfQorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVy
RnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5k
YW5jaWVzOworICAgIGRlcGVuZGFuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIHByb21p
c2UpKTsKKyAgICBkZXBlbmRhbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBnbG9iYWxP
YmplY3QpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2Uo
cHJvbWlzZSwgV1RGTW92ZShkZXBlbmRhbmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0g
YWRvcHRSZWYoKm5ldyBQbGFuKHZtLCAqc291cmNlLCBQbGFuOjpWYWxpZGF0aW9uLCBbc291cmNl
LCBwcm9taXNlLCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsKKyAgICAgICAgUmVm
UHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VE
ZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtzb3VyY2UsIHByb21pc2Us
IGdsb2JhbE9iamVjdCwgcGxhbiA9IFdURk1vdmUocGxhbildICgpIG11dGFibGUgeworICAgICAg
ICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgSlNWYWx1ZSBtb2R1bGUgPSBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5
TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUoc291cmNlKSwgcGxhbi5jb3B5UmVmKCkpOworICAg
ICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0
KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAKLSAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgICAg
ICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgIH0pOworICAgIH0pKTsK
KworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwcm9taXNlLCBwbGFuLmNvcHlS
ZWYoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwog
fQogCitlbnVtIGNsYXNzIFJlc29sdmUgeyBXaXRoSW5zdGFuY2UsIFdpdGhNb2R1bGVBbmRJbnN0
YW5jZSB9Oworc3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Us
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGlm
IChlbnRyaWVzID09IFJlc29sdmU6OldpdGhJbnN0YW5jZSkKKyAgICAgICAgcHJvbWlzZS0+cmVz
b2x2ZShleGVjLCBpbnN0YW5jZSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoIm1vZHVsZSIp
KSwgbW9kdWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5jZSk7CisgICAg
ICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU09iamVjdCogaW1wb3J0
T2JqZWN0LCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29t
cGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBhbGxvY2F0ZSBpdHMgZ2F0aGVyIGFsbCB0aGUgaW1w
b3J0L21lbW9yeSBpbmZvcm1hdGlvbiBwcmlvciB0bworICAgIC8vIGdlbmVyYXRpbmcgYW55IGNv
ZGUuIElmIHdlIGRpZG4ndCBkbyB0aGlzIHdlIG1pZ2h0IGNob29zZSB0byBjb21waWxlIHdpdGgg
U2lnbmFsaW5nIG1lbW9yeSBidXQgYWN0dWFsbHkgZ2V0IGEgQm9udWRzIENoZWNraW5nCisgICAg
Ly8gbWVtb3J5IHRoZW4gaGF2ZSB0byByZWNvbXBpbGUuCisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBt
b2R1bGUsIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseUluc3RhbmNlU3RydWN0dXJlKCkpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewor
ICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEp
IFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2ssIHNvIHdl
IGhhdmUgbm8gbW9yZSB3b3JrIHRvIGRvLgorICAgIC8vIDIpIFRoZSBpbnN0YW5jZSBoYXMgbm8g
Q29kZUJsb2NrLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugb25lIGFuZCBjb21waWxlIHRoZSBjb2RlIGZv
ciBpdC4KKyAgICAvLyAzKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gdW5pbml0aWFsaXpl
ZCBDb2RlQmxvY2ssIHNvIHNvbWVvbmUgZWxzZSBpcyBjb21waWxpbmcgY29kZSBhbmQgd2UganVz
dCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uCisKKyAgICBpZiAoaW5zdGFuY2UtPnJ1bm5hYmxlKCkp
IHsKKyAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
ZW50cmllcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U3Ryb25nPEpT
Q2VsbD4+IGRlcGVuZGFuY2llczsKKyAgICBkZXBlbmRhbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0Nl
bGw+KHZtLCBwcm9taXNlKSk7CisgICAgLy8gdGhlIGluc3RhbmNlIGtlZXBzIHRoZSBtb2R1bGUg
YWxpdmUuCisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW5zdGFu
Y2UpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJv
bWlzZSwgV1RGTW92ZShkZXBlbmRhbmNpZXMpKTsKKworICAgIGlmIChpbnN0YW5jZS0+Y29kZUJs
b2NrKCkpIHsKKyAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlQmxvY2tl
ZFRhc2soaW5zdGFuY2UtPmNvZGVCbG9jaygpLT5wcm9taXNlKCksIFsmdm0sIHByb21pc2UsIGlu
c3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdICgpIHsKKyAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgaWYgKCFpbnN0
YW5jZS0+cnVubmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVu
IGJlY2F1c2Ugd2UgcmFuIG91dCBvZiBtZW1vcnkuCisgICAgICAgICAgICAgICAgcHJvbWlzZS0+
cmVqZWN0KGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgZW50cmllcyk7CisKKyAgICAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRp
bWVyLT5jYW5jZWxQZW5kaW5nUHJvbWlzZShwcm9taXNlKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2so
dm0sIHByb21pc2UpOworCisgICAgLy8gRklYTUU6IFRoaXMgcmVwYXJzZXMgdGhlIG1vZHVsZSBo
ZWFkZXIsIHdoaWNoIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuCisgICAgUmVmPFBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1vZHVsZS0+c291cmNlKCksIFBsYW46OkZ1bGxDb21w
aWxlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllc10gKFBsYW4mIHApIHsKKyAg
ICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52bSgp
LnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9taXNl
LCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzLCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgewor
ICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgaWYg
KCFpbnN0YW5jZS0+cnVubmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIHNvbWVvbmUgY291
bGQgZG8gYSBzeW5jaHJvbm91cyBjb21waWxlIGFuZCBzdGVhbCB0aGUgY29tcGlsYXRpb24KKyAg
ICAgICAgICAgICAgICBpbnN0YW5jZS0+Y29kZUJsb2NrKCktPmluaXRpYWxpemUodm0sICpwbGFu
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewor
ICAgICAgICAgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXNvbHZlKHZtLCBl
eGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzKTsKKyAgICAgICAgfSk7Cisg
ICAgfSkpOworCisgICAgcGxhbi0+c2V0TW9kZShpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKTsKKwor
ICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwcm9taXNlLCBwbGFuLmNvcHlSZWYo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVyLCBK
U09iamVjdCogaW1wb3J0T2JqZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJj
ZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCApOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRhbmNpZXM7
CisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgcHJvbWlzZSkpOwor
ICAgIGRlcGVuZGFuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkp
OworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9taXNl
LCBXVEZNb3ZlKGRlcGVuZGFuY2llcykpOworCisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHByb21p
c2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAg
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5w
cm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBw
cm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgcGxhbiA9IFdURk1vdmUocGxhbild
ICgpIG11dGFibGUgeworICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHByb21pc2UtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJs
eU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIHBsYW4uY29weVJlZigpKTsKKyAg
ICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbnN0YW50aWF0ZSh2bSwgZXhlYywgcHJvbWlzZSwgbW9k
dWxlLCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhNb2R1bGVBbmRJbnN0YW5jZSk7CisgICAg
ICAgIH0pOworICAgIH0pKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgQVBJIHRydWx5IGFzeW5jaHJvbm91czogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NwotCiAgICAgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRj
aFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIGF1dG8gcmVqZWN0ID0gWyZdICgpIHsK
LSAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOwot
ICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgp
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwot
ICAgIH07Ci0KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7
CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgp
OwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0
KSB7CkBAIC05MywyOSArMjI3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2Vi
QXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIAogICAgIEpT
VmFsdWUgZmlyc3RBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIEpTVmFsdWUgbW9k
dWxlOwotICAgIGJvb2wgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gZmFsc2U7Ci0gICAgaWYgKGZp
cnN0QXJndW1lbnQuaW5oZXJpdHModm0sIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmluZm8oKSkpIHsK
LSAgICAgICAgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gdHJ1ZTsKLSAgICAgICAgbW9kdWxlID0g
Zmlyc3RBcmd1bWVudDsKLSAgICB9IGVsc2UgewotICAgICAgICBtb2R1bGUgPSBXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZmlyc3RBcmd1bWVudCwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsK
LSAgICAgICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0KCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9
IFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoZXhlYywganND
YXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihtb2R1bGUpLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAg
ICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHJlamVjdCgpOwot
Ci0gICAgaWYgKGZpcnN0QXJndW1lbnRJc01vZHVsZSkKLSAgICAgICAgcHJvbWlzZS0+cmVzb2x2
ZShleGVjLCBpbnN0YW5jZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoIm1vZHVsZSIpKSwg
bW9kdWxlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5jZSk7Ci0gICAgICAg
IHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKGF1dG8qIG1v
ZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBmaXJzdEFyZ3Vt
ZW50KSkKKyAgICAgICAgaW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2UsIG1vZHVsZSwgaW1w
b3J0T2JqZWN0LCBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpOworICAgIGVsc2UKKyAgICAgICAgY29t
cGlsZUFuZEluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBmaXJzdEFyZ3VtZW50LCBpbXBv
cnRPYmplY3QpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNl
KCkpOwogfQpAQCAtMTI5LDcgKzI0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIHNpemVfdCBieXRl
U2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFdhc206OlBsYW4gcGxhbigm
dm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgV2FzbTo6UGxhbiBwbGFuKHZt
LCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09N
IGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suaAppbmRleCA0NWQwY2Q5NzU1YWE0ZWYyNTU3Y2IyYWJjZDU5YmI0YTgwNDZh
NjkzLi5mMWMwYmU1MjQ4ZjkyMzM2ZjY5MTk0Y2MyNjhjYjJkMzk3MDYxMjE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNs
dWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgog
I2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTM5LDE0ICs0MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5Owog
CituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBQbGFuOworfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwg
QmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3du
ZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21F
eGl0U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQg
Y2FsbGVlQ291bnQpCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9k
ZSwgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAg
IHsKLSAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNX
ZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQp
KSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIHN0ZDo6Zm9yd2FyZDxCYWc8Q2Fs
bExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2FyZDxWZWN0b3I8V2FzbTo6V2Fz
bUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxlZUNvdW50KTsKKyAgICAgICAgYXV0
byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVC
bG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIHByb21pc2UsIGNhbGxlZUNvdW50KTsKICAgICAg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtNTYsMTAgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemUo
Vk0mIHZtLCBXYXNtOjpQbGFuJik7CisKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsgfQogICAgIFdhc206Ok1l
bW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLSAg
ICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAgICBib29sIGlzU2Fm
ZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25zdDsKKyAgICBib29sIGluaXRpYWxpemVk
KCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQorICAgIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlKCkgY29uc3QgeyBBU1NFUlQoIWluaXRpYWxpemVkKCkpOyByZXR1cm4gbV9wcm9t
aXNlOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CkBA
IC04OSwxMCArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCAr
IG1fY2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKICAgICB9CiAKLSAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOwotICAgIH0KKyAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKSB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsgfQogCiAgICAgdm9pZCogd2Fz
bVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB7CkBAIC0x
MDEsNyArMTA3LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxsTGlua0luZm8+
JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnk6Ok1vZGUsIHVu
c2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIFdhc206Ok1lbW9yeTo6TW9kZSwgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2UsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0xMjUsNyArMTMxLDEwIEBAIHByaXZhdGU6
CiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAg
ICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZlY3RvcjxXYXNtOjpX
YXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7CisgICAgYm9vbCBtX2luaXRpYWxpemVkIHsg
ZmFsc2UgfTsKICAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbV9tb2RlOworICAgIC8vIFRoZSBwcm9t
aXNlIHRoYXQgd2FzIGluaXRpYWxseSB1c2VkIGZvciB0aGUgY29tcGlsYXRpb24gdGhpcyBjb2Rl
IGJsb2NrLgorICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3Byb21pc2U7CiAgICAgdW5zaWduZWQg
bV9jYWxsZWVDb3VudDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAwYTJlNWNjYzhjNGIyNTliMjI3OWI0MDAwYWEyYjRi
YTNjNTUyNmMzLi5lZGExMGZkNWUxNTIwZTg0Mzc0YTM1ZGEwMzZhMTkwNmE3MjBhNDdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBA
IC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9B
UkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEIzSVJHZW5lcmF0
b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5h
bEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jik7CisgICAgQjNJUkdl
bmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUlu
dGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnk6
Ok1vZGUpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1l
bnRzKGNvbnN0IFNpZ25hdHVyZSopOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTIxOSw2ICsyMTksNyBAQCBwcml2YXRl
OgogCiAgICAgVk0mIG1fdm07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsK
KyAgICBNZW1vcnk6Ok1vZGUgbV9tb2RlOwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxz
OwpAQCAtMjI5LDkgKzIzMCwxMCBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFs
dWU7CiB9OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxG
dW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2
bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBX
YXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeTo6TW9kZSBtb2RlKQogICAg
IDogbV92bSh2bSkKICAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9tb2RlKG1vZGUpCiAgICAg
LCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyh1bmxp
bmtlZFdhc21Ub1dhc21DYWxscykKIHsKQEAgLTQ1OCw3ICs0NjAsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+
IFBhcnRpYWxSZQogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVw
YXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQz
Ml90IHNpemVPZk9wZXJhdGlvbikKIHsKICAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKLSAg
ICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2lu
ZykgeworICAgIGlmIChtX21vZGUgPT0gTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgewog
ICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9w
ZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1f
bWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CkBAIC00OTQsNyAr
NDk2LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQogCiBp
bmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9y
eU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnk6OlNpZ25hbGlu
ZykKKyAgICBpZiAobV9tb2RlID09IE1lbW9yeTo6U2lnbmFsaW5nKQogICAgICAgICByZXR1cm4g
dHJhcHBpbmcobWVtb3J5T3ApOwogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KQEAgLTEyMDAsNyAr
MTIwMiw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0sIENvbXBp
bGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0CiAgICAgaml0LnJldCgpOwogfQogCi1F
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIHVuc2lnbmVkIG9wdExldmVsKQorRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3Qg
dWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWdu
YXR1cmVJbmRpY2VzLCBNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigp
OwogCkBAIC0xMjA4LDcgKzEyMTAsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUlu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sCiAgICAgY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2Fs
bEhlbHBlcnM+KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIzSVJHZW5l
cmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHBy
b2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CiAg
ICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKCZ2bSwgY29udGV4dCwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0
dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAyNDlkNTc4MTRhOTI4YzRiZjkyMDZiYzg1
MjU2NGMzNmM3ODg5YTRlLi45N2U0ZTQ3NTkyYWEyYWM0Mjc2NmM3ZjA4M2M1MDk4ZWRkMTA3ZmEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJl
KHZvaWQqKTsKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwog
fTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50
OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21w
aWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUq
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnk6Ok1vZGUsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCA5YTdhNjcyOWE3MWZiZGYwNTE3NGEx
Y2NjMTFhNTZmNjI3MWRjZWJjLi45OWZkOTVjODM0NDA1MGY0YzlhZTIyNWRhNmQwNmJkNTY0NjQ0
NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yNjAsNiAr
MjYwLDcgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICB9CiAKICAgICB1aW50MzJf
dCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIHVpbnQzMl90IGludGVybmFsRnVuY3Rpb25Db3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KTsgfQogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggMjRmMTgx
NTZlMjlmN2YzZDJkYTE2MGE5MzRlN2JjYjVhMGIyYjhkYS4uZDI2NTRhYjQyODE0MGMwMmYyYTE1
MzUwMmEwNDVlZWJjMjdkNTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC03NCw3ICs3NCw3IEBAIFBpbm5lZFJl
Z2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJ
bmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1h
dGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpv
cHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1v
cnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KQogICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAg
ICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04
MiwxOSArODIsNiBAQCBNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZt
LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdQogICAgIFJFTEVBU0VfQVNTRVJU
KCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11
bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0aGlzKTsKLQotICAgIGlmICghcmVjb21w
aWxlTW9kZSkgewotICAgICAgICBpZiAoIWlzSW1wb3J0KSB7Ci0gICAgICAgICAgICBtX3Jlc2Vy
dmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6
U2lnbmFsaW5nKTsKLSAgICAgICAgICAgIGlmIChtX3Jlc2VydmVkTWVtb3J5KSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAgICAgICAgIG1f
bW9kZSA9IG1fcmVzZXJ2ZWRNZW1vcnktPm1vZGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9tb2RlID0gTWVtb3J5OjpsYXN0
QWxsb2NhdGVkTW9kZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX21vZGUgPSAqcmVjb21waWxl
TW9kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNWE5YTc3YTg3
Y2RmNWMxNWRhZjI3MTg2YWFjZTUzMWZmZGFkMjZkZi4uZDE4MmM3M2NkNjUzODhjYWQ2NTlmNTdm
YWUwYzMyODMzZGVhZWNmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTU0LDIyICs1NCwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVCghKnRoaXMpOwogICAgIH0KIAotICAgIE1lbW9yeUluZm9ybWF0aW9uKFZNJiwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9y
eTo6TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CiAKICAgICBQYWdl
Q291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3Vu
dCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgYm9vbCBoYXNSZXNl
cnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KLSAgICBSZWZQ
dHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNlcnZlZE1lbW9y
eSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9Ci0gICAgTWVtb3J5OjpN
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIGlzSW1wb3J0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbml0aWFsOyB9CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRy
PE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsK
ICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKLSAgICBNZW1vcnk6Ok1vZGUgbV9tb2RlIHsg
TWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZh
bHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1ZmQzZTRjM2Qu
Ljk1ZTVkMjliNTA1OWM5YTU5MzcwNDZmZmI4ZTllMDg3ZDgwODM4MTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0zMTYsNyArMzE2
LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNT
RVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VD
b3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9u
KCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1w
b3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGlu
aXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4g
eyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmgKaW5kZXggOTRiYTE0ZTE1YTNmZGEzMTA0ZTMzYmFjMDkzYzFmMWU4MWNmMjBjNi4uN2IzMmE5
MDhjODkyMTRkYWZmN2EwMzIzNjA3NjdjMzk2YWUzMzExOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtNDQsOSArNDQsOCBAQCBzdHJ1Y3Qg
TW9kdWxlUGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8
TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZt
LCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6
b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiBtb2RlKQorICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICAgICAg
OiBQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgICAgICAsIG1fbW9k
ZShtb2RlKQogICAgIHsKICAgICB9CiAKQEAgLTY2LDcgKzY1LDYgQEAgcHJpdmF0ZToKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1
aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQg
bV9yZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IG1fbW9kZSB7IHN0ZDo6
bnVsbG9wdCB9OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggMWE4ZDNkY2VlNjJkNTg2MDk1MWU4
NmUwYTU1MGY4MDI5NTQwYWUyMy4uZDM1MjQ4NTc4NmRlODc4OTk5OTFjZTRiNmIzZTA4YTc3OTRm
MTYwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNDIsNyAr
NDIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5o
PgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL051bWJlck9m
Q29yZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N5
c3RlbVRyYWNpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC01
MCwzMCArNDksNDUgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAKLVBsYW46OlBsYW4oVk0qIHZtLCBW
ZWN0b3I8dWludDhfdD4gc291cmNlKQotICAgIDogUGxhbih2bSwgc291cmNlLmRhdGEoKSwgc291
cmNlLnNpemUoKSkKKworUGxhbjo6UGxhbihWTSYgdm0sIEFycmF5QnVmZmVyJiBzb3VyY2UsIEFz
eW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKHZtLCByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2UuZGF0YSgpKSwgc291cmNlLmJ5dGVMZW5ndGgo
KSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK3sKK30KKworUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rv
cjx1aW50OF90PiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNr
KQorICAgIDogUGxhbih2bSwgc291cmNlLmRhdGEoKSwgc291cmNlLnNpemUoKSwgd29yaywgV1RG
TW92ZSh0YXNrKSkKIHsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKK1BsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50
OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0
aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX3ZtKHZtKQorICAgICwgbV9jb21wbGV0aW9uVGFzayh0
YXNrKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNl
TGVuZ3RoKQorICAgICwgbV9hc3luY1dvcmsod29yaykKK3sKK30KKwordm9pZCBQbGFuOjpmYWls
KFN0cmluZyYmIGVycm9yTWVzc2FnZSkKIHsKKyAgICBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUo
ZXJyb3JNZXNzYWdlKTsKKyAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6RmFpbGVkKTsKKyAgICBtX2Nv
bXBsZXRpb25UYXNrKCp0aGlzKTsKIH0KIAotYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQorYm9vbCBQbGFu
OjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0
ZTo6SW5pdGlhbCk7CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CiAgICAgaWYgKHZlcmJv
c2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIHN0YXJ0VGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwogCiAgICAgewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9k
dWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgcmVjb21waWxlTW9kZSk7
CisgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoJm1fdm0sIG1fc291cmNlLCBtX3Nv
dXJjZUxlbmd0aCk7CiAgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFy
c2UoKTsKICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewotICAgICAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBwYXJzZVJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAgZmFpbChXVEZNb3ZlKHBh
cnNlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9k
dWxlKTsKQEAgLTg4LDQ2ICsxMDIsNDIgQEAgYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQogICAgICAgICBz
aXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlv
bkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAg
ICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCk7
CiAKLSAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihtX3Zt
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZv
cm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
cyk7CisgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oJm1f
dm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVsZUlu
Zm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRp
Y2VzKTsKICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5j
dGlvbkxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1
bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklY
TUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgZmFpbChtYWtlU3RyaW5nKHZh
bGlkYXRpb25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5n
OjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVk
LgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIGRhdGFM
b2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pY3Jvc2Vj
b25kcygpLCAiIHVzIHRvIHZhbGlkYXRlIG1vZHVsZSIpOworICAgIG1vdmVUb1N0YXRlKFN0YXRl
OjpWYWxpZGF0ZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBXZSBhcmUgY3JlYXRpbmcg
YSBidW5jaCBvZiB0aHJlYWRzIHRoYXQgdG91Y2ggdGhlIG1haW4gdGhyZWFkJ3Mgc3RhY2suIFRo
aXMgd2lsbCBtYWtlIEFTQU4gdW5oYXBweS4KLS8vIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyB0
aGF0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIHVu
dGlsIGFsbCB0aHJlYWRzCi0vLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUgZG9uZSBl
eGVjdXRpbmcuCi1TVVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxN
ZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUoKQogewotICAg
IGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShyZWNvbXBpbGVNb2RlKSkKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGF0ZTo6SW5pdGlhbCk7CisgICAgaWYgKCFwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6VmFs
aWRhdGVkKTsKIAogICAgIFRyYWNlU2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVT
dGFydCwgV2ViQXNzZW1ibHlDb21waWxlRW5kKTsKIAotICAgIGlmIChyZWNvbXBpbGVNb2RlKQot
ICAgICAgICBBU1NFUlQobV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKSA9PSByZWNv
bXBpbGVNb2RlKTsKLQogICAgIGF1dG8gdHJ5UmVzZXJ2ZUNhcGFjaXR5ID0gW3RoaXNdIChhdXRv
JiB2ZWN0b3IsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiB3aGF0KSB7CiAgICAgICAgIGlmIChV
TkxJS0VMWSghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkpIHsKICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiRmFpbGVkIGFsbG9jYXRpbmcgZW5vdWdoIHNwYWNlIGZvciAiKTsKICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKHNpemUpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQod2hh
dCk7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgIGZhaWwoYnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1MSwxMjYgKzE2MSwx
MTggQEAgdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGls
ZU1vZGUpCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9j
ZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjog
IiwgaW1wb3J0LT5tb2R1bGUsICI6ICIsIGltcG9ydC0+ZmllbGQpOwogICAgICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnQtPmtpbmRJbmRleCk7Ci0gICAgICAgIG1fd2Fz
bUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IobV92bSwgbV9jYWxs
TGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAg
ICBtX3dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKCZtX3Zt
LCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7
CiAgICAgfQogCi0gICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIG1vdmVUb1N0YXRlKFN0YXRl
OjpQcmVwYXJlZCk7Cit9CiAKLSAgICBhdXRvIGRvV29yayA9IFt0aGlzXSB7Ci0gICAgICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgICsr
bV9jdXJyZW50SW5kZXg7Ci0gICAgICAgICAgICB9CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBo
b3JlIGNsYXNzLi4uIGFuZCB0aGlzIGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xh
c3MgUGxhbjo6VGhyZWFkQ291bnRIb2xkZXIgeworcHVibGljOgorICAgIFRocmVhZENvdW50SG9s
ZGVyKFBsYW4mIHBsYW4pCisgICAgICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVy
T2ZBY3RpdmVUaHJlYWRzKys7CisgICAgfQogCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBm
dW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5j
dGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1f
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICAgICAgQVNTRVJU
KGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5j
dGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2ln
bmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0g
bV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0
dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2ln
bmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24obV92bSwg
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3Jt
YXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMp
KTsKLQotICAgICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIG1fY29tcGlsYXRp
b25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1f
bW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25h
dHVyZUluZGljZXMpOwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGls
ZVJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBX
ZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgotICAgICAgICAgICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIs
IGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNp
emUoKTsKKyAgICB+VGhyZWFkQ291bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9wbGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZl
VGhyZWFkcy0tOwogCi0gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJtaW5hdGUgb24gdGhl
IG5leHQgZXhlY3V0aW9uLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKCFtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpCisgICAgICAg
ICAgICBtX3BsYW4uY29tcGxldGUobG9ja2VyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21w
aWxlUmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07CisgICAgUGxhbiYgbV9wbGFuOworfTsKIAot
ICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6
OnJlcG9ydENvbXBpbGVUaW1lcygpKQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKK3ZvaWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucygpCit7CisgICAgQVNTRVJUKG1f
c3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKKyAgICBpZiAobV9zdGF0ZSA+PSBTdGF0ZTo6Q29t
cGlsZWQpCisgICAgICAgIHJldHVybjsKIAotICAgIHVpbnQzMl90IHRocmVhZENvdW50ID0gT3B0
aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkg
OiAxOwotICAgIHVpbnQzMl90IG51bVdvcmtlclRocmVhZHMgPSB0aHJlYWRDb3VudCAtIDE7Ci0g
ICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFkcy5yZXNlcnZl
Q2FwYWNpdHkobnVtV29ya2VyVGhyZWFkcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgdGhyZWFkcy51bmNoZWNrZWRBcHBlbmQo
Y3JlYXRlVGhyZWFkKCJqc2Mud2FzbS1iMy1jb21waWxhdGlvbi50aHJlYWQiLCBkb1dvcmspKTsK
KyAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOworICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4
OworICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA9PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAg
ICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBpbGVkKTsKKyAgICAgICAgfQogCi0gICAgZG9X
b3JrKCk7IC8vIExldCB0aGUgbWFpbiB0aHJlYWQgZG8gc29tZSB3b3JrIHRvby4KKyAgICAgICAg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAt
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAg
ICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFs
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93
YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJ
bmRleCk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9t
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOworCisgICAg
ICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGUobV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwg
bV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgbV9tb2Rl
KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlm
ICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxl
cyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZp
cnN0LgorICAgICAgICAgICAgICAgIGZhaWwobWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1
bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVu
Y3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeS5zaXplKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1Xb3JrZXJUaHJlYWRzOyBpKyspCi0gICAgICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbaV0pOworICAgICAgICBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7
CisgICAgfQorfQogCi0gICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rp
b25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRl
eCsrKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4
dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJu
YWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBT
dHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1f
dm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsKK3ZvaWQgUGxhbjo6Y29tcGxldGUoY29u
c3QgTG9ja0hvbGRlciYpCit7CisgICAgQVNTRVJUKG1fY3VycmVudEluZGV4ID49IG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgQVNTRVJUKCFoYXNXb3JrKCkpOworCisg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7CisgICAgICAgIGZvciAodWludDMy
X3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNvbnRleHQud2FzbUVudHJ5
cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rp
b25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CisgICAgICAg
ICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXNbZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVy
ZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJl
SW5kZXgpLT50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklU
LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNb
ZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4
LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQu
d2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCptX3ZtLCAqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9p
bnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIobV92bSwgKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNFbnRyeXBvaW50VG9XYXNt
RW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0
aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKIAotICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAg
ICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dh
c21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtl
X3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJKYXZh
U2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC5qc0Vu
dHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29t
cGlsZVRpbWVzKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1l
Ojpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksCi0gICAgICAgICAgICAiIHVzIHRv
IGNvbXBpbGUgYW5kIGxpbmsgdGhlIG1vZHVsZSIpOwotICAgIH0KIAotICAgIC8vIFBhdGNoIHRo
ZSBjYWxsIHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0
byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZvciAo
YXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzczsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVu
Y3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMs
IGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3Vs
ZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJl
c3MgPSBjYWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMK
LSAgICAgICAgICAgICAgICAgICAgPyBtX3dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbklu
ZGV4KS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKQotICAgICAgICAgICAgICAg
ICAgICA6IG1fd2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXgpLndhc21Ub1dhc20u
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldCAhPSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpU
YXJnZXQ6OlRvSnMpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4IC0gbV93YXNtRXhpdFN0dWJz
LnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFk
ZHJlc3MpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fZmFpbGVkID0gZmFsc2U7CisgICAg
aWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICBtb3ZlVG9TdGF0ZShT
dGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAgbV9jb21wbGV0aW9uVGFzaygqdGhpcyk7CisgICAg
ICAgIG1fY29tcGxldGVkLm5vdGlmeUFsbCgpOworICAgIH0KIH0KIAotdm9pZCBQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzdGQ6OmZ1bmN0aW9u
PHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVl
Kik+IGNhbGxiYWNrKQordm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgQVNT
RVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXgg
PSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXpl
KCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25J
bmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwg
V1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRp
b24sIGpzRW50cnlwb2ludENhbGxlZSk7Ci0KLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3Zl
TG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKLQotICAgICAgICBjYWxsYmFjayhpbnRl
cm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxs
ZWUpOwotICAgIH0KKyAgICBtX2NvbXBsZXRlZC53YWl0KG1fbG9jayk7CiB9CiAKIFBsYW46On5Q
bGFuKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCBkMDcwMzc1
MjAzMmM5YWEwY2Q4NTg0MTdmYjE3MjZlN2ZiOWMzZGY5Li4wNzA3MGUxMjVhYmM1MzcwODkzMmYx
YzUzZmMxOTRkN2ZmYWE2YjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDMsMjQgKzQzLDI0IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiAKIG5hbWVzcGFjZSBX
YXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwg
VmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3Qg
dWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQgZG9udEZpbmFsaXplKFBsYW4mKSB7
IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChQbGFuJik+IENvbXBsZXRpb25UYXNr
OworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9u
IH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJl
bmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xl
LgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiYsIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihW
TSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwor
ICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBydW4oc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+ID0gc3RkOjpudWxsb3B0KTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmUoKTsKKyAgICB2b2lkIGNvbXBpbGVG
dW5jdGlvbnMoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUNhbGxl
ZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+KTsKLQotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7Ci0gICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpbml0aWFsaXplQ2FsbGVl
cyhjb25zdCBGdW5jdG9yJik7CiAKICAgICBWZWN0b3I8RXhwb3J0PiYgZXhwb3J0cygpIGNvbnN0
CiAgICAgewpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGludGVybmFsRnVu
Y3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVk
KCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOworICAg
ICAgICByZXR1cm4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOwogICAgIH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3Jt
YXRpb24oKQpAQCAtOTIsOSArOTIsNDAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92
ZShtX3dhc21FeGl0U3R1YnMpOwogICAgIH0KIAotICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKTsgfQorICAgIE1l
bW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgdm9pZCBzZXRN
b2RlKE1lbW9yeTo6TW9kZSBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KKyAgICBWTSYgdm0oKSBj
b25zdCB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7
CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQs
CisgICAgICAgIENvbXBpbGVkLAorICAgICAgICBGYWlsZWQsCisgICAgICAgIENvbXBsZXRlZAor
ICAgIH07CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJl
dHVybiAhIWVycm9yTWVzc2FnZSgpOyB9CisgICAgYm9vbCBoYXNXb3JrKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21waWxlZDsgfQorICAgIGJvb2wgaGFzQmVlblByZXBhcmVk
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KKworICAgIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZhaWxlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOworICAgIH0K
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKIAogcHJp
dmF0ZToKKyAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhy
ZWFkQ291bnRIb2xkZXI7CisKKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IExvY2tIb2xkZXImKTsK
KworICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUgc3RhdGUpIHsgQVNTRVJUKHN0YXRlID4gbV9z
dGF0ZSk7IG1fc3RhdGUgPSBzdGF0ZTsgfQorICAgIHZvaWQgZmFpbChTdHJpbmcmJiBlcnJvck1l
c3NhZ2UpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVs
ZUluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gbV9tb2R1
bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKQEAgLTEwMywxNiAr
MTM0LDIzIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJu
YWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxh
dGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAgIFZNKiBtX3ZtOworICAg
IFZNJiBtX3ZtOworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRhc2s7CisKICAgICBW
ZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBt
X3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBt
X2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKKyAgICBNZW1vcnk6
Ok1vZGUgbV9tb2RlIHsgTWVtb3J5OjpCb3VuZHNDaGVja2luZyB9OwogICAgIExvY2sgbV9sb2Nr
OworICAgIENvbmRpdGlvbiBtX2NvbXBsZXRlZDsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6
OkluaXRpYWwgfTsKKyAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CisgICAgdWludDhf
dCBtX251bWJlck9mQWN0aXZlVGhyZWFkczsKKyAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleCB7
IDAgfTsKIH07CiAKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5J
bmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRiMjE1MzUzNjE4MDk1ZmVkOGI5MWIzODA3ZGU3MjU5MzY4
YTllYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuSW5saW5lcy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxl
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgordm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9y
JiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIWZhaWxlZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKKyAg
ICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKKworICAgICAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVh
dGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVN
b3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENhbGxlZSk7CisKKyAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVh
dGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0
aW9uLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxG
dW5jdGlvbkluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsK
KyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YWUyYjg3Y2ViYzRhYjQ5YzNiNTM3M2FmOGE2YzdiNTdjNzU2ZmUx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmts
aXN0LmNwcApAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0
LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtUGxhbi5oIgor
CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKworCitjbGFzcyBXb3JrbGlzdDo6VGhyZWFkIGZpbmFsIDogcHVibGljIEF1
dG9tYXRpY1RocmVhZCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBBdXRvbWF0aWNUaHJlYWQgQmFz
ZTsKKyAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgV29ya2xpc3QmIHdv
cmspCisgICAgICAgIDogQmFzZShsb2NrZXIsIHdvcmsubV9sb2NrLCB3b3JrLm1fcGxhbkVucXVl
dWVkKQorICAgICAgICAsIHdvcmtsaXN0KHdvcmspCisgICAgeworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgYXR0ZW1wdFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFuKGNvbnN0IEFic3RyYWN0
TG9ja2VyJikKKyAgICB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gd29ya2xpc3QubV9xdWV1ZTsK
KworICAgICAgICBpZiAocXVldWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAocXVldWUudG9wKCkucGxhbiA9PSBlbGVtZW50LnBsYW4pCisgICAgICAgICAgICBx
dWV1ZS5wb3AoKTsKKyAgICB9CisKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gd29y
a2xpc3QubV9xdWV1ZTsKKworICAgICAgICB3aGlsZSAoIXF1ZXVlLmVtcHR5KCkpIHsKKworICAg
ICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS50b3AoKS5wcmlvcml0eTsKKyAgICAg
ICAgICAgIGlmIChwcmlvcml0eSA9PSBXb3JrbGlzdDo6UHJpb3JpdHk6OlNodXRkb3duKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOworCisgICAgICAgICAgICBlbGVt
ZW50ID0gcXVldWUudG9wKCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLnRvcCgpLm11bHRpVGhy
ZWFkZWQoKSkKKyAgICAgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKworICAgICAgICAgICAgaWYg
KGVsZW1lbnQucGxhbi0+aGFzV29yaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVz
dWx0OjpXb3JrOworCisgICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgYW5vdGhlciB0aHJl
YWQgbGlua2luZyB0aGlzIHBsYW4gc28gd2UgY2FuIGRlcXVlIGFuZCBzZWUgaWYgdGhlcmUgYXJl
IG90aGVyIHBsYW5zLgorICAgICAgICAgICAgYXR0ZW1wdFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFu
KGxvY2tlcik7CisgICAgICAgICAgICBlbGVtZW50ID0gUXVldWVFbGVtZW50KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7CisgICAgfQorCisgICAgV29ya1Jl
c3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gY29tcGxldGUgPSBbJl0g
KCkgeworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOworICAgICAgICAgICAg
cmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICB9OworCisgICAgICAgIFBsYW4q
IHBsYW4gPSBlbGVtZW50LnBsYW4uZ2V0KCk7CisgICAgICAgIEFTU0VSVChwbGFuKTsKKyAgICAg
ICAgaWYgKCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgeworICAgICAgICAgICAgcGxhbi0+cHJl
cGFyZSgpOworICAgICAgICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRlKCk7CisKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCp3
b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0UHJpb3JpdHkoKTsKKyAg
ICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsKKyAgICAgICAgICAgIHdv
cmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBzb21lIG9jY2FzaW9uYWxs
eSB0byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5LCBwbGFucyB0aGF0IG5l
ZWQgdG8gYmUgcnVuLgorICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKCk7CisgICAgICAg
IEFTU0VSVCghcGxhbi0+aGFzV29yaygpKTsKKyAgICAgICAgYXR0ZW1wdFRvUmVtb3ZlQ29tcGls
YXRpb25QbGFuKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xvY2spKTsKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdvcmtsaXN0JiB3b3JrbGlzdDsKKyAg
ICBRdWV1ZUVsZW1lbnQgZWxlbWVudDsKK307CisKK2Jvb2wgV29ya2xpc3Q6OlF1ZXVlRWxlbWVu
dDo6bXVsdGlUaHJlYWRlZCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAg
IGNhc2UgUHJpb3JpdHk6OlNodXRkb3duOgorICAgIGNhc2UgUHJpb3JpdHk6OkNvbXBpbGF0aW9u
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9yaXR5KCkK
K3sKKyAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CisgICAgICAgIGNhc2UgUHJpb3JpdHk6OlByZXBh
cmF0aW9uOgorICAgICAgICAgICAgcHJpb3JpdHkgPSBQcmlvcml0eTo6Q29tcGlsYXRpb247Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV29y
a2xpc3Q6OmVucXVldWUoSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIFJlZlB0cjxQbGFuPiBw
bGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworCisgICAgLy8gSWYgd2Ug
ZG9uJ3QgaGF2ZSBhIHByb21pc2UgaXQgbXVzdCBiZSBzeW5jaHJvbm91cyBzbyB3ZSBzaG91bGQg
Ym9vc3QgdGhlIHByaW9yaXR5LgorICAgIFByaW9yaXR5IHByaW9yaXR5ID0gcHJvbWlzZSA/IFBy
aW9yaXR5OjpQcmVwYXJhdGlvbiA6IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICBtX3F1ZXVl
LnB1c2goeyBwcmlvcml0eSwgbmV4dFRpY2tldCgpLCBwcm9taXNlLCBXVEZNb3ZlKHBsYW4pIH0p
OworICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsKK30KKworUmVmUHRyPFBs
YW4+IFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5Gb3JQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlKQoreworICAgIEFTU0VSVChwcm9taXNlKTsKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworCisgICAgICAgIC8v
IHN0ZDo6cHJpb3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBhbiBpdGVyYXRvci4uLiA6KCBXaGls
ZSB0aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0aW9uCisgICAgICAgIC8vIHNob3VsZG4ndCBiZSBj
YWxsZWQgdmVyeSBvZnRlbiBhbmQgdGhlIHF1ZXVlIHNob3VsZCBiZSBzbWFsbC4KKyAgICAgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBoYXZlIG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNu
J3Qgc3Vjay4KKyAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgUXVldWVFbGVtZW50PiBlbGVtZW50
czsKKyAgICAgICAgd2hpbGUgKCFtX3F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICht
X3F1ZXVlLnRvcCgpLnByb21pc2UgPT0gcHJvbWlzZSkgeworICAgICAgICAgICAgICAgIFF1ZXVl
RWxlbWVudCB0YXJnZXQgPSBtX3F1ZXVlLnRvcCgpOworICAgICAgICAgICAgICAgIG1fcXVldWUu
cG9wKCk7CisKKyAgICAgICAgICAgICAgICBwbGFuID0gdGFyZ2V0LnBsYW47CisgICAgICAgICAg
ICAgICAgdGFyZ2V0LnByaW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAgICAgICAg
ICAgICAgIG1fcXVldWUucHVzaCh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKG1fcXVldWUudG9wKCkp
OworICAgICAgICAgICAgbV9xdWV1ZS5wb3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
YXV0byBlbGVtZW50IDogZWxlbWVudHMpCisgICAgICAgICAgICBtX3F1ZXVlLnB1c2goZWxlbWVu
dCk7CisgICAgfQorCisgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICByZXR1cm4g
cGxhbjsKK30KKworV29ya2xpc3Q6OldvcmtsaXN0KCkKKyAgICA6IG1fbG9jayhCb3g8TG9jaz46
OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
OjpjcmVhdGUoKSkKK3sKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkcyA9
IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIC0gMTsgLy8gU2F2ZSBhIGNvcmUgZm9yIHRo
ZSBtYWluIHRocmVhZC4KKyAgICBtX3RocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ29t
cGlsYXRpb25UaHJlYWRzKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7IGkrKykK
KyAgICAgICAgbV90aHJlYWRzW2ldID0gc3RkOjptYWtlX3VuaXF1ZTxXb3JrbGlzdDo6VGhyZWFk
Pihsb2NrZXIsICp0aGlzKTsKK30KKworV29ya2xpc3Q6On5Xb3JrbGlzdCgpCit7CisgICAgewor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgbV9xdWV1ZS5wdXNo
KHsgUHJpb3JpdHk6OlNodXRkb3duLCBuZXh0VGlja2V0KCksIG51bGxwdHIsIG51bGxwdHIgfSk7
CisgICAgICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGhyZWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV90aHJlYWRzW2ldLT5qb2luKCk7Cit9CisKK3N0YXRpYyBXb3JrbGlzdCogZ2xvYmFsV29ya2xp
c3Q7CisKK1dvcmtsaXN0KiBleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCkgeyByZXR1cm4gZ2xvYmFs
V29ya2xpc3Q7IH0KK1dvcmtsaXN0JiBlbnN1cmVXb3JrbGlzdCgpCit7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIGluaXRpYWxpemVXb3JrbGlzdDsKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0
aWFsaXplV29ya2xpc3QsIFtdIHsKKyAgICAgICAgZ2xvYmFsV29ya2xpc3QgPSBuZXcgV29ya2xp
c3QoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKmdsb2JhbFdvcmtsaXN0OworfQorCisKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk2
NjFkMThlNWI3MjE1NWEzYTY4NTYwOGE3Zjk2ZjFmZjFhYmFmZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJWTS5oIgorCisj
aW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworI2luY2x1ZGUgPHF1ZXVlPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNQcm9taXNl
RGVmZXJyZWQ7CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgUGxhbjsKKworY2xhc3MgV29y
a2xpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdvcmts
aXN0KCk7CisgICAgfldvcmtsaXN0KCk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVu
cXVldWUoSlNQcm9taXNlRGVmZXJyZWQqLCBSZWZQdHI8UGxhbj4pOworICAgIHZvaWQgc3RvcEFs
bFBsYW5zRm9yVk0oVk0mKTsKKworICAgIFJlZlB0cjxQbGFuPiBjb21wbGV0ZVBsYW5Gb3JQcm9t
aXNlKEpTUHJvbWlzZURlZmVycmVkKik7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgVGhyZWFkOwor
ICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7CisKKyAgICB0eXBlZGVmIHVuc2lnbmVkIFRpY2tldDsK
KyAgICBUaWNrZXQgbmV4dFRpY2tldCgpIHsgcmV0dXJuIG1fbGFzdEdyYW50ZWRUaWNrZXQrKzsg
fQorCisgICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29u
ZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKKworICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgeworICAg
ICAgICBTaHV0ZG93biwKKyAgICAgICAgU3luY2hyb25vdXMsCisgICAgICAgIENvbXBpbGF0aW9u
LAorICAgICAgICBQcmVwYXJhdGlvbgorICAgIH07CisKKworICAgIHN0cnVjdCBRdWV1ZUVsZW1l
bnQgeworICAgICAgICBQcmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRpY2tldDsK
KyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2U7CisgICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuOworCisgICAgICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNvbnN0OworICAgICAgICB2
b2lkIG5leHRQcmlvcml0eSgpOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29tcGFyYXRvciB7Cisg
ICAgICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yKCkoY29uc3QgUXVldWVFbGVtZW50JiBsZWZ0
LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bGVmdC5wcmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bGVmdC50aWNrZXQgPiByaWdodC50aWNrZXQ7CisgICAgICAgICAgICByZXR1cm4gbGVmdC5wcmlv
cml0eSA+IHJpZ2h0LnByaW9yaXR5OworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIFdURjo6VmVjdG9yIGJ1dCBXVEY6OlZlY3RvciBkb2VzIG5vdCBzdXBw
b3J0IHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IuCisgICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxRdWV1
ZUVsZW1lbnQsIHN0ZDo6dmVjdG9yPFF1ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+IG1fcXVldWU7
CisgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZsb3cgYnV0IHRoYXQncyB1bmxp
a2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21waWxlIHRoaW5ncyBvZiB0aGUg
c2FtZQorICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBvcmRlciwgd2hpY2ggaXNuJ3Qgd3Jv
bmcsIGp1c3Qgc3Vib3B0aW1hbC4KKyAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRpY2tldCB7IDAg
fTsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXV0b21hdGljVGhyZWFkPj4gbV90aHJl
YWRzOworfTsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKTsKK0pTX0VYUE9S
VF9QUklWQVRFIFdvcmtsaXN0JiBlbnN1cmVXb3JrbGlzdCgpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCmluZGV4IGI4
Nzc3ZGEwZDRkN2ExMzBmNDIyNGVkNDVmY2NjMmQxOWMxZjI3YzYuLmE4YTNkY2EzZDA5ZjVkZDM5
ZGE2YjlhOGY5OTVkYzg1MDg5ODdhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGlj
OgogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1
cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7Ci0gICAgSlNXZWJB
c3NlbWJseUNhbGxlZShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBXYXNtOjpFbnRyeXBvaW50JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
V2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKIAogICAgIFdhc206OkVudHJ5cG9pbnQgbV9lbnRyeXBv
aW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggYjIxZjhhNWNjNjQ1ZjJlMjViNzc0MTE3YmRh
Zjk4YWY0NzBkMzRhMS4uNmY0N2UyMmNkNDhkNjdkZjdmNGFjMDUwOTAyZGJlNDFhOTllMzIyZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAKQEAgLTMxLDI5ICszMSw1MyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5m
byA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3du
ZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21F
eGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCAgV2FzbTo6TWVtb3J5
OjpNb2RlIG1vZGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCB1bnNpZ25lZCBjYWxsZWVD
b3VudCkKICAgICA6IEJhc2Uodm0sIHZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpKQotICAgICwgbV9jYWxsTGlua0luZm9zKFdURk1vdmUoY2FsbExpbmtJbmZvcykpCi0gICAg
LCBtX3dhc21FeGl0U3R1YnMoV1RGTW92ZSh3YXNtRXhpdFN0dWJzKSkKICAgICAsIG1fbW9kZSht
b2RlKQorICAgICwgbV9wcm9taXNlKHByb21pc2UpCiAgICAgLCBtX2NhbGxlZUNvdW50KGNhbGxl
ZUNvdW50KQogewogICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgb3duZXIpOworICAgIG93bmVy
LT5hZGRDb2RlQmxvY2sodm0sIHRoaXMpOwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2Fs
bGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIp
OwogfQogCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoVk0mIHZtLCBX
YXNtOjpQbGFuJiBwbGFuKQoreworICAgIEFTU0VSVCghbV9pbml0aWFsaXplZCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIXBsYW4uaGFzV29yaygpICYmICFwbGFuLmZhaWxlZCgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChwbGFuLm1vZGUoKSA9PSBtb2RlKCkpOworICAgIEFTU0VSVChwbGFuLmludGVy
bmFsRnVuY3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworICAgIEFTU0VSVCh2bS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKworICAgIG1fY2FsbExpbmtJbmZvcyA9IHBs
YW4udGFrZUNhbGxMaW5rSW5mb3MoKTsKKyAgICBtX3dhc21FeGl0U3R1YnMgPSBwbGFuLnRha2VX
YXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWdu
ZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgc2V0
SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsK
KyAgICAgICAgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50
cnlwb2ludENhbGxlZSk7CisgICAgfSk7CisKKyAgICBtX3Byb21pc2UgPSBudWxscHRyOworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqPihjZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2soKTsKIH0KIAotYm9vbCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1
bihKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCitib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgY29uc3QKIHsKKyAg
ICBpZiAoIW1faW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICht
b2RlKCkgPT0gV2FzbTo6TWVtb3J5OjpTaWduYWxpbmcpCiAgICAgICAgIHJldHVybiBtZW1vcnkt
Pm1lbW9yeSgpLm1vZGUoKSA9PSBtb2RlKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAppbmRl
eCBmMDMzMTBlYTVlMjA2MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li41NzhhNjlmNDk4MTVh
ODI1MjNjMTEyOTQ4ZmJkOGVhMDkwMzVmMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTczLDYgKzczLDIyIEBA
IEFMV0FZU19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVmZmVyVmlldyA/IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQogCitBTFdBWVNf
SU5MSU5FIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBieXRlT2Zmc2V0Owor
ICAgIHNpemVfdCBieXRlU2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZy
b21WYWx1ZShleGVjLCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBp
ZiAoYnVmZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFzc2VtYmx5SG9zdEZ1
bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiomIHdh
c21GdW5jdGlvbiwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNtV3JhcHBlckZ1bmN0
aW9uKQogewogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseUZ1bmN0aW9u
OjppbmZvKCkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCAxYzExYjBjYTY1YzkxNzQyZjhlNDgxM2My
NGQ5NzVmNjVlZWJhYTE4Li4wMjg2YTE0NzQwNThiNTZhZDgyNmQwYjI1NzY1OWM0NWNjMzNkMjA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTMyLDMxICszMiwxNiBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1l
bW9yeShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5
KQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBX
ZSBjcmVhdGUgc3R1YiBtZW1vcmllcyBldmVuIGZvciBtb2R1bGVzIHRoYXQgc2hvdWxkIGV2ZW50
dWFsbHkgZ2V0IGEgbWVtb3J5IHNvIHdlIHdhbnQgdG8gYXZvaWQgcmVjb21wbGluZyB0aGVyZS4K
LSAgICBpZiAobWVtb3J5LT5tZW1vcnkoKSkgewotICAgICAgICBhdXRvIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrLT5tb2R1bGUoKS0+Y29kZUJsb2NrKHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCk7Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2
bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBt
ZW1vcnkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVj
dCkKLXsKLSAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdl
IHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplKG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvblNp
Z25hdHVyZUluZGljZXMuc2l6ZSgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgc3RydWN0
dXJlLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBtb2R1bGUs
IG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQorY29uc3Qg
Q2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHku
SW5zdGFuY2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSkgfTsKIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogewpAQCAtNzksNyArNjQsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUs
CiAgICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5
U2l6ZSk7CiAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9y
eVNpemUpOwogCi0gICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNvZGVCbG9j
aygpKTsKICAgICBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5h
bWVzcGFjZU9iamVjdCk7CiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImV4cG9ydHMiKSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBOb25lKTsKIH0KQEAgLTEw
MSwxMCArODUsMjUzIEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXpl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9y
dEZ1bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqdGhpc09iamVjdC0+aW1w
b3J0RnVuY3Rpb24oaSkpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBv
cnRGdW5jdGlvbnMoKVtpXSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjphZGRV
bml0aWFsaXplZENvZGVCbG9jayhWTSYgdm0sIEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQpCit7
CisgICAgYXV0byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZt
LCBtb2R1bGUoKSwgbWVtb3J5TW9kZSgpLCB0aWNrZXQsIG1vZHVsZSgpLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmludGVybmFsRnVuY3Rpb25Db3VudCgpKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0s
IHRoaXMsIGNvZGVCbG9jayk7CisgICAgQVNTRVJUKCFjb2RlQmxvY2stPmluaXRpYWxpemVkKCkp
OworfQorCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVs
ZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkK
K3sKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisKKyAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKKworICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09i
amVjdCogZXJyb3IpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
ZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgLy8gSWYgdGhl
IGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVj
dCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgorICAgIGlmIChtb2R1bGVJ
bmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQorICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1h
a2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVj
dCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRzIikpKTsKKworICAg
IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFtZShQ
cml2YXRlTmFtZTo6RGVzY3JpcHRpb24sICJXZWJBc3NlbWJseUluc3RhbmNlIikpOworICAgIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgbW9kdWxlSW5mb3JtYXRpb24pOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogVGhl
c2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhyb3cgT09N
IGhlcmUuCisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9y
bWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0s
IGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50
KCkpOworICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZVJl
Y29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQg
dGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9i
amVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBv
YmplY3RzLCByZXNwZWN0aXZlbHkuCisgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5
LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgorICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1
bmN0aW9ucyA9IDA7CisgICAgdW5zaWduZWQgbnVtSW1wb3J0R2xvYmFscyA9IDA7CisKKyAgICBi
b29sIGhhc01lbW9yeUltcG9ydCA9IGZhbHNlOworICAgIGJvb2wgaGFzVGFibGVJbXBvcnQgPSBm
YWxzZTsKKyAgICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKKyAgICBm
b3IgKGF1dG8mIGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKKyAgICAgICAg
Ly8gMS4gTGV0IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBv
cnRPYmplY3QsIGkubW9kdWxlX25hbWUpLgorICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZh
bHVlID0gaW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgIC8vIDIuIElm
IFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICgh
aW1wb3J0TW9kdWxlVmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4g
b2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBv
cnRNb2R1bGVWYWx1ZSkpKTsKKworICAgICAgICAvLyAzLiBMZXQgdiBiZSB0aGUgdmFsdWUgb2Yg
cGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgICAgIHN3aXRjaCAoaW1w
b3J0LmtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlv
bjogeworICAgICAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6Cisg
ICAgICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBX
ZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24g
bXVzdCBiZSBjYWxsYWJsZSIpKSk7CisKKyAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rp
b24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgLy8gaWkuIElm
IHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKKyAgICAgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CisgICAgICAgICAgICAgICAgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CisgICAgICAgICAg
ICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVu
Y3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGEu
IElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGks
IHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgICAgICAgICBXYXNt
OjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgICAg
ICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRT
aWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25h
dHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1
bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0
aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRT
aWduYXR1cmVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBv
cnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJB
c3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgorICAgICAgICAgICAgICAgIC8vIGEuIExl
dCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3
aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2Ny
aXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFu
eSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNzZW1ibHlWYWx1ZS4KKyAgICAgICAgICAgICAgICAv
LyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAg
ICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3MuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogYWRk
aW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1
aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBh
bGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCisKKyAgICAgICAgICAgICAgICBB
U1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbnMoKVtudW1JbXBvcnRGdW5jdGlvbnMrK10u
c2V0KHZtLCBpbnN0YW5jZSwgZnVuY3Rpb24pOworICAgICAgICAgICAgICAgIC8vIHYuIEFwcGVu
ZCBjbG9zdXJlIHRvIGltcG9ydHMuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3Vs
ZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgorICAgICAgICAgICAgICAg
IC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6CisgICAgICAgICAgICAgICAg
aGFzVGFibGVJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBv
YmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgICAgIGlm
ICghdGFibGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQg
aXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKKworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24uaW5pdGlhbCgpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbElu
aXRpYWwgPSB0YWJsZS0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFs
IDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFi
bGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7CisK
KyAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhp
bXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9
IHRhYmxlLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11
bSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9l
cyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRv
ZXMiKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0
ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVk
IFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAn
bWF4aW11bSciKSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlp
LiBBcHBlbmQgdiB0byB0YWJsZXMuCisgICAgICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5b
W1RhYmxlXV0gdG8gaW1wb3J0cy4KKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5z
ZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7Cisg
ICAgICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJl
IGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5KTsKKyAgICAgICAgICAgICAgICBo
YXNNZW1vcnlJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5NZW1v
cnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAgICAg
ICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBp
bXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7CisKKyAg
ICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291
bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOworICAgICAgICAg
ICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcg
dGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VD
b3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0g
bWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYWN0
dWFsTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkg
aW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0
aGF0IGl0IGRvZXMiKSkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhpbXVt
ID4gZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
Ik1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhw
ZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCisgICAgICAgICAgICAgICAgLy8gaWlpLiBB
cHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFp
bnN0YW5jZS0+bV9tZW1vcnkpOworICAgICAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5z
ZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7
CisgICAgICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CisgICAgICAg
ICAgICAgICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBU
eXBlRXJyb3IuCisgICAgICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJs
ZSk7CisgICAgICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9iYWxfdHlwZSBvZiBpIGlzIGk2
NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9y
LgorICAgICAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5r
aW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6STY0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOworICAgICAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVy
YWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIikpKTsKKyAgICAgICAgICAgICAg
ICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0
LmtpbmRJbmRleF0udHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xv
YmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysr
LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAvLyBXZSBz
aG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93
biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBv
cnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAm
JiAhaGFzTWVtb3J5SW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3JlYXRl
IGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAgICAgICAgUmVm
UHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5t
YXhpbXVtKCkpOworICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKworICAgICAgICAg
ICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCisgICAgICAgICAgICAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgp
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1h
dGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24uaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEg
VGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJs
ZUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwo
KSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3Nl
bWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCisgICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQg
dG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9y
LgorICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
ICAgIEFTU0VSVCh0YWJsZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0s
IGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFpbnN0
YW5jZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBt
ZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBu
dWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KKyAgICAg
ICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1l
bW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisgICAg
fQorICAgIAorICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1JbXBvcnRH
bG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOworICAgICAg
ICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4
IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNb
Z2xvYmFsSW5kZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5
cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLmlu
aXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBu
dW1JbXBvcnRHbG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGds
b2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPcklt
cG9ydE51bWJlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1i
ZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVj
LCBpbnN0YW5jZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKKyAgICAKKyAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0
ZShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIGluc3RhbmNl
OwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAppbmRleCAzOTNkMzczMTU4OGE4NjkwNzdhOWIzYjhiNTllYWIzYjQ3MTljYzkwLi4y
NGU4OTVhY2I3YzVlZjJlZDQ0NWJhZDQxMmZhYjJiY2IyZmVkYTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAt
MzgsNTEgKzM4LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogCituYW1lc3BhY2UgV2FzbSB7Cisg
ICAgY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVj
dGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRl
KFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAK
LSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5tb2R1bGUo
KTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLmdldCgpOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGlt
cG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRGdW5j
dGlvbnMoKVtpZHhdOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9y
dEZ1bmN0aW9ucygpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFy
cmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBv
cnRGdW5jdGlvbnMoKSk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAgYm9vbCBydW5u
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvZGVCbG9jaygpICYmIGNvZGVCbG9jaygpLT5pbml0aWFs
aXplZCgpOyB9CisgICAgdm9pZCBhZGRVbml0aWFsaXplZENvZGVCbG9jayhWTSYsIEpTUHJvbWlz
ZURlZmVycmVkKik7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyBB
U1NFUlQoY29kZUJsb2NrKCkpOyByZXR1cm4gbV9jb2RlQmxvY2stPm1vZHVsZSgpOyB9CiAKLSAg
ICB2b2lkIHNldEltcG9ydEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHZhbHVlLCB1bnNpZ25l
ZCBpZHgpCi0gICAgewotICAgICAgICBpbXBvcnRGdW5jdGlvbihpZHgpLT5zZXQodm0sIHRoaXMs
IHZhbHVlKTsKLSAgICB9CisgICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlk
eCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBp
bXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5
KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQotICAgIC8vIENhbGxpbmcgdGhp
cyBtaWdodCB0cmlnZ2VyIGEgcmVjb21waWxlLgotICAgIHZvaWQgc2V0TWVtb3J5KFZNJiwgRXhl
Y1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVt
b3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOyB9CiAgICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1lbW9y
eU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpOyB9CiAKICAgICBKU1dl
YkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKSB7IG1fdGFibGUu
c2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KICAgICBpbnQ2NF90
IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgp
W2ldOyB9CkBAIC05MCwxMSArNzEsNiBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGxvYWRGNjRHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2
NEdsb2JhbChpKSk7IH0KICAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJp
dHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQogCi0gICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+
KSAqIGlkeDsKLSAgICB9Ci0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dl
YkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KQEAgLTExMyw2ICs4OSw4IEBAIHByb3Rl
Y3RlZDoKICAgICB9CiAKIHByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1w
b3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVj
dD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSk7IH0KKwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVC
bG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxl
TmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBt
X21lbW9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAKaW5kZXggNTZmMjBiNDM1MDY5ZjNmYjVmMGI2OTEyMmMzNzI5ODFh
MGM1ZjUzOS4uZGQ1NDE1ZTVjOWY3Njg5NDg4NjU0ZDFmNmUwNWI2ODkwZWMzYjRlMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHAKQEAgLTQyLDM1ICs0MiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1vZHVsZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJs
eU1vZHVsZSkgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVs
ZTo6YnVpbGRDb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdhc206OlBsYW4mIHBs
YW4sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlKQorSlNXZWJBc3NlbWJs
eU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1YihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNlLCBSZWZQdHI8V2FzbTo6
UGxhbj4mJiBwbGFuKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMg
dGhyb3duLgotICAgIHBsYW4ucnVuKG1vZGUpOwotICAgIGlmIChwbGFuLmZhaWxlZCgpKSB7Ci0g
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yKGV4ZWMsIHZtLCBwbGFuLmVycm9yTWVzc2FnZSgpKSk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBpZiAobW9kZSkKLSAgICAgICAgQVNTRVJUKCptb2RlID09
IHBsYW4ubW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50ID0gcGxhbi5pbnRlcm5h
bEZ1bmN0aW9uQ291bnQoKTsKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpjcmVhdGUodm0sIHRoaXMsIHBsYW4udGFrZUNhbGxMaW5rSW5mb3MoKSwgcGxhbi50
YWtlV2FzbUV4aXRTdHVicygpLCBwbGFuLm1vZGUoKSwgY2FsbGVlQ291bnQpOwotCi0gICAgcGxh
bi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwKLSAg
ICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxl
ZSkgewotICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNh
bGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5z
ZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2Fs
bGVlKTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICBBU1NFUlQoIXBs
YW4tPmhhc1dvcmsoKSk7CisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUo
dm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUtPmZpbmlzaENyZWF0
aW9uKHZtLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwogfQogCi1KU1dlYkFz
c2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBi
eXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6YWRkQ29kZUJsb2NrKFZNJiB2bSwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGF1dG8qIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVh
cCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7Ci0KLSAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwotICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICBhdXRvIG1vZGUgPSBjb2RlQmxvY2stPm1vZGUoKTsKKyAgICBBU1NFUlQo
IXRoaXMtPmNvZGVCbG9jayhtb2RlKSk7CisgICAgbV9jb2RlQmxvY2tzW21vZGVdLnNldCh2bSwg
dGhpcywgY29kZUJsb2NrKTsKIH0KIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKQEAgLTc4LDYxICs2MiwyNiBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
SlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNl
KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zb3VyY2VCdWZmZXIoc291cmNl
LnJlbGVhc2VOb25OdWxsKCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseU1lbW9yeSogbWVtb3J5KQotewotICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlID0g
bWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
V2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1vZGVzOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3NbaV0tPmlzU2FmZVRvUnVuKG1lbW9yeSkpCi0gICAgICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2tzW2ldLmdldCgpOwotICAgIH0KLQotICAgIEFTU0VSVCgh
bV9jb2RlQmxvY2tzW21vZGVdKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwg
d2UgbmVlZCB0byByZWNvbXBpbGUuLi4KLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5i
eXRlTGVuZ3RoKCkpOwotCi0gICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0s
IGV4ZWMsIHBsYW4sIG1vZGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotCi0gICAgQVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5bWJv
bFRhYmxlLT5zaXplKCkpOwotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGV4cCwgbV9leHBvcnRTeW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkpOwot
ICAgIH0KLQotICAgIEFTU0VSVChtb2RlID09IGNvZGVCbG9jay0+bW9kZSgpKTsKLSAgICBtX2Nv
ZGVCbG9ja3NbbW9kZV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIHJldHVybiBjb2Rl
QmxvY2s7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQor
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxX
YXNtOjpQbGFuPiYmIHBsYW4pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc291cmNlLCBieXRl
U2l6ZSk7Ci0KLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywg
cGxhbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwpOwotCiAgICAgLy8gT24gc3Vj
Y2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtb
TW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KICAgICBTeW1ib2xUYWJs
ZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKTsKLSAgICBmb3Ig
KGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7CisgICAgZm9yIChhdXRvJiBleHAgOiBwbGFu
LT5leHBvcnRzKCkpIHsKICAgICAgICAgYXV0byBvZmZzZXQgPSBleHBvcnRTeW1ib2xUYWJsZS0+
dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgICAgICBleHBvcnRT
eW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgZXhwLmZpZWxkLmltcGwoKSwgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0KIAotICAgIG1fc291cmNl
QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICBtX21v
ZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBtX21v
ZHVsZUluZm9ybWF0aW9uID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgbV9l
eHBvcnRTeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIGV4cG9ydFN5bWJvbFRhYmxlKTsKLSAgICBt
X2NvZGVCbG9ja3NbY29kZUJsb2NrLT5tb2RlKCldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsK
IH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aAppbmRleCA3MDQwNjhjNjVkZTEzZWJiMmI2YTg4ZDU5YmU1NmU1OGU2YmIzYjA4Li5lZTU1MzU0
OGZlZDg3ODI4NWZiNzg1MmQyODU2NTBlZGQwMDRhODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC00OCwzMyArNDgs
MzIgQEAgY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9i
amVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwog
Ci0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKKyAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlU3R1YihWTSYsIFN0cnVjdHVyZSosIFJlZlB0
cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UsIFJlZlB0cjxXYXNtOjpQbGFuPiYmIHBsYW4pOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiAqbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IHRha2VSZXNlcnZl
ZE1lbW9yeSgpIHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS50YWtlUmVzZXJ2
ZWRNZW1vcnkoKTsgfQogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5m
b3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbklu
ZGV4U3BhY2UpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0
aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlz
IHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttX21vZHVsZUluZm9ybWF0aW9uLT5tZW1v
cnkubW9kZSgpXS5nZXQoKTsgfQotICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUg
YmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNvbXBp
bGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0YXRl
KiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9jayhXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW21v
ZGVdLmdldCgpOyB9CisKKyAgICBBcnJheUJ1ZmZlciYgc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VCdWZmZXIuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6
Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4gbW9kZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAg
ZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7CisgICAgdm9pZCBhZGRDb2RlQmxv
Y2soVk0mLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4ZWNT
dGF0ZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKKyAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmUHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3NvdXJj
ZUJ1ZmZlcjsKKyAgICBSZWY8QXJyYXlCdWZmZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsK
ICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CiAgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpN
ZW1vcnk6Ok51bWJlck9mTW9kZXNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggYWMzMTgxYjNmOWRjZWU0ZTEzM2IwODdmZjcxZjQ5MDE1ZTQ4OGQyZC4uY2ExMmI2Zjc2YTRh
NzIwY2RhYWMyMmI1MGZlNjUxM2YxZjBlOTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29y
a2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmgiCkBAIC00NSw4ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5m
bywgJmNvbnN0cnVjdG9yVGFibGVXZWJBc3NlbWJseUluc3RhbmNlLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvcikgfTsKIAogLyogU291cmNlIGZvciBX
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IubHV0LmgKQEAgLTU0LDI2OSArNTQsNDkgQEAg
Y29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiRnVuY3Rpb24iLCAmQmFzZTo6c18KICBAZW5kCiAgKi8KIAordXNpbmcgV2FzbTo6UGxhbjsK
Kwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3Nl
bWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gSWYgbW9kdWxl
T2JqZWN0IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBpbnN0YW5jZSwgYSBUeXBlRXJyb3Ig
aXMgdGhyb3duLgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIWpzTW9kdWxlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
ImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3Nl
bWJseS5Nb2R1bGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVl
KGV4ZWMtPmFyZ3VtZW50KDApKSkpKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUg
PSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQo
MCkpOworICAgIGlmICghbW9kdWxlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2Vi
QXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0
IHBhcmFtZXRlciBpcyBub3QgdW5kZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90
IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIEpTVmFsdWUgaW1wb3J0QXJndW1l
bnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0gaW1w
b3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVm
aW5lZCgpICYmICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3Qg
YmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRp
bWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2Ug
bXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwg
cnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAgICAgCiAgICAgU3RydWN0
dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNz
U3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotCi0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6
OmNyZWF0ZUluc3RhbmNlKGV4ZWMsIGpzTW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3Ry
dWN0dXJlKSk7Ci19Ci0KLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGlu
c3RhbmNlU3RydWN0dXJlKQotewotICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKTsKLQotICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVjdCogZXJyb3Ip
IHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9k
dWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9i
amVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgotICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5p
bXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1i
bHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdl
YkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRzIikpKTsKLQotICAgIElkZW50aWZpZXIg
bW9kdWxlS2V5ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFtZShQcml2YXRlTmFtZTo6
RGVzY3JpcHRpb24sICJXZWJBc3NlbWJseUluc3RhbmNlIikpOwotICAgIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6Y3JlYXRl
KGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJl
KCksIG1vZHVsZUtleSwgbW9kdWxlSW5mb3JtYXRpb24pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLQotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1
Y3R1cmUsIGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIC8v
IExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMg
b2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0
cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgotICAgIC8vIExl
dCBpbXBvcnRzIGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4K
LSAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUlt
cG9ydEdsb2JhbHMgPSAwOwotCi0gICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKLSAg
ICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7Ci0gICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkg
aW4gbW9kdWxlLmltcG9ydHM6Ci0gICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRzKSB7Ci0gICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFs
dWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KLSAgICAg
ICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIGlt
cG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwotICAgICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEg
VHlwZUVycm9yLgotICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIs
IHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7Ci0KLSAgICAgICAgLy8g
My4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQot
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxl
VmFsdWUpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0
LmZpZWxkKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKLQotICAgICAgICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1
bmN0aW9uIGltcG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMgZmFs
c2UsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5j
dGlvbiBtdXN0IGJlIGNhbGxhYmxlIikpKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0
aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOwotICAgICAgICAgICAgLy8gaWkuIElmIHYg
aXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKLSAgICAgICAgICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwotICAgICAgICAgICAgaWYgKGlzV2Vi
QXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFw
cGVyRnVuY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBv
ZiB2IGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJs
eS5MaW5rRXJyb3IuCi0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0
ZWRTaWduYXR1cmVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQotICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5z
aWduYXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0
dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5b
W0Nsb3N1cmVdXS4KLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1
bmN0aW9uLT5mdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3Jt
YXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwot
ICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBm
dW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJs
eSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv
LyBpaWkuIE90aGVyd2lzZToKLSAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3
IGhvc3QgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNv
ZXJjaW5nIFdlYkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEg
VG9KU1ZhbHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlh
IFRvV2ViQXNzZW1ibHlWYWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMgcGFydCBv
ZiBQbGFuIGNvbXBpbGF0aW9uLgotICAgICAgICAgICAgLy8gaXYuIEFwcGVuZCB2IHRvIGZ1bmNz
LgotICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNl
IGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3Nl
bWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5j
dGlvbikuCi0KLSAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0
LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0s
IGZ1bmN0aW9uLCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7Ci0gICAgICAgICAgICAvLyB2LiBBcHBl
bmQgY2xvc3VyZSB0byBpbXBvcnRzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVk
IGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChp
IGlzIGEgdGFibGUgaW1wb3J0KToKLSAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsK
LSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlz
IG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5r
RXJyb3IuCi0gICAgICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJUYWJsZSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxl
IikpKTsKLQotICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7Ci0gICAgICAgICAgICB1aW50MzJf
dCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJ
bml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJU
YWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsK
LQotICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11
bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7Ci0gICAg
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxl
LT5tYXhpbXVtKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAn
bWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMg
bGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCi0gICAgICAg
ICAgICAvLyBpaWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAg
aW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7Ci0gICAgICAg
ICAgICAvLyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFoYXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5
IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5KTsKLSAgICAgICAgICAgIGhhc01lbW9yeUltcG9ydCA9IHRydWU7
Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0
PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYg
diBpcyBub3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5
LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJs
eS5NZW1vcnkiKSkpOwotCi0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0
aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKLSAgICAgICAgICAgIFdh
c206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7
Ci0gICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlh
bCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNv
dW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkp
IHsKLSAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9y
eS0+bWVtb3J5KCkubWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11
bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5v
dCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIp
KSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11
bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhp
bXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVz
LgotICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0g
ICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpH
bG9iYWw6IHsKLSAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgotICAg
ICAgICAgICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBU
eXBlRXJyb3IuCi0gICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tp
bXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsK
LSAgICAgICAgICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBpcyBpNjQgb3IgVHlw
ZSh2KSBpcyBub3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAg
ICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5
cGUgPT0gV2FzbTo6STY0KQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBn
bG9iYWwgY2Fubm90IGJlIGFuIGk2NCIpKSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0
IGJlIGEgbnVtYmVyIikpKTsKLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIFRvV2ViQXNzZW1i
bHlWYWx1ZSh2KSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2Jh
bHMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9y
bWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBv
cnRHbG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFs
dWUudG9GbG9hdChleGVjKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1J
bXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGlmICgh
IW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJ
bXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5
IGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9y
dCgpKTsKLSAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1v
cnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsK
LSAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1v
cnkoKSkKLSAgICAgICAgICAgICAgICBtZW1vcnkgPSBqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVt
b3J5KCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1vcnkgPSBXYXNt
OjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwg
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtZW1vcnkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnN0YW5j
ZS0+c2V0TWVtb3J5KHZtLCBleGVjLAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1l
bW9yeVN0cnVjdHVyZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOwotICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgfQorICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMs
IG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJs
ZSBjYXNlczoKKyAgICAvLyAxKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gaW5pdGlhbGl6
ZWQgQ29kZUJsb2NrLCBzbyB3ZSBoYXZlIG5vIG1vcmUgd29yayB0byBkby4KKyAgICAvLyAyKSBU
aGUgaW5zdGFuY2UgaGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBhbmQg
Y29tcGlsZSB0aGUgY29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVhZHkg
aGFzIGFuIHVuaW5pdGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyAuCisKKyAgICBpZiAoaW5zdGFuY2Ut
PnJ1bm5hYmxlKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5zdGFuY2UpOwor
CisgICAgUmVmUHRyPFBsYW4+IHBsYW47CisgICAgaWYgKGluc3RhbmNlLT5jb2RlQmxvY2soKSkg
eworICAgICAgICBwbGFuID0gV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0ZVBsYW5Gb3JQ
cm9taXNlKGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cHJvbWlzZSgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgpLCBQ
bGFuOjpGdWxsQ29tcGlsZSwgUGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgICAgIFdhc206OmVu
c3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShudWxscHRyLCBwbGFuKTsKKyAgICAgICAgcGxhbi0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIGlmICghIW1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbi5pc0ltcG9ydCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhh
dmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4K
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc1RhYmxlSW1wb3J0KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhh
c1RhYmxlSW1wb3J0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3Jt
YXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKLSAgICAgICAgICAgIC8vIFdlIGNy
ZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24uCi0gICAgICAgICAgICBK
U1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhl
Yywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVj
dHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0o
KSk7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUg
YSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4KLSAgICAgICAgICAgIC8vIElmIGl0
J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlk
YXRpb24gZXJyb3IuCi0gICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OwotICAgICAgICAgICAgQVNTRVJUKHRhYmxlKTsgCi0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0
VGFibGUodm0sIHRhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaW5zdGFuY2Ut
Pm1lbW9yeSgpKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5
LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0
ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCi0gICAgICAgIGlu
c3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVy
ZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7Ci0gICAgfQotCi0gICAgLy8g
R2xvYmFscwotICAgIHsKLSAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gbW9kdWxl
SW5mb3JtYXRpb24uZmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGds
b2JhbEluZGV4ID0gbnVtSW1wb3J0R2xvYmFsczsgZ2xvYmFsSW5kZXggPCBtb2R1bGVJbmZvcm1h
dGlvbi5nbG9iYWxzLnNpemUoKTsgKytnbG9iYWxJbmRleCkgewotICAgICAgICAgICAgY29uc3Qg
YXV0byYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tnbG9iYWxJbmRleF07Ci0g
ICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9i
YWw6OklzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgewotICAgICAgICAgICAgICAgIEFT
U0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMp
OwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3Rh
bmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGds
b2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgbW9kdWxlUmVjb3JkLT5kdW1wKCk7Ci0gICAgSlNWYWx1ZSBzdGFydFJlc3Vs
dCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXJ0
UmVzdWx0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwot
Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGluc3RhbmNlLT5jb2RlQmxvY2soKS0+aW5pdGlh
bGl6ZSh2bSwgKnBsYW4pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5zdGFuY2UpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJs
eUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggNTk3MDlmNTE3NTZkYzU1ZWEyYmQyNzg2NjM1MDVlOWUzOTM3ZjAxMy4uNzc4MDE3MDE0ZTgy
OTBjMmMwZmFkOTE0ZTgzNGJiOTA3ZTNjNzdhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5j
cHAKQEAgLTc1LDEzICs3NSwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYnVmZgogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgc2l6ZV90IGJ5dGVPZmZzZXQ7Ci0gICAgc2l6ZV90IGJ5dGVTaXplOwotICAgIHVp
bnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgYnl0ZVNpemUpOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRl
U291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgZXhlYywgc3RydWN0dXJlLCBiYXNlICsg
Ynl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFJlZlB0cjxXYXNtOjpQbGFuPiBwbGFuID0gYWRv
cHRSZWYobmV3IFdhc206OlBsYW4odm0sICpzb3VyY2UsIFdhc206OlBsYW46OlZhbGlkYXRpb24s
IFdhc206OlBsYW46OmRvbnRGaW5hbGl6ZSkpOworICAgIGlmICghcGxhbi0+cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUs
IEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgpLCBwbGFu
LT5lcnJvck1lc3NhZ2UoKSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGVTdHViKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShwbGFuKSk7CiB9
CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1v
ZHVsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBmZmZl
ZTVjMTBmNTlmODFmMWJiZTNjZjFkNTQ3N2NmOTBjNjg3ZjcwLi41YzBjNDdiZTFhOTk3ODNjMzVk
MzI3NjExYzBkYWUwOWVlNDBiNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0xMTIsNyArMTEy
LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgICAgIC8vICAgaWkuIChOb3Rl
OiBBdCBtb3N0IG9uZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGFueSBjbG9zdXJlLCBzbyBmdW5j
IGlzIHVuaXF1ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2NjdXJyYW5jZXMgaW4gdGhl
IGxpc3QuIE1vcmVvdmVyLCBpZiB0aGUgaXRlbSB3YXMgYW4gaW1wb3J0IHRoYXQgaXMgYWxyZWFk
eSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0LCB0aGVuIHRoZSBvcmlnaW5hbCBm
dW5jdGlvbiBvYmplY3Qgd2lsbCBiZSBmb3VuZC4gRm9yIGltcG9ydHMgdGhhdCBhcmUgcmVndWxh
ciBKUyBmdW5jdGlvbnMsIGEgbmV3IHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLikKICAgICAgICAg
ICAgIGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rpb25JbXBvcnRDb3VudCkgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2luZEluZGV4OwotICAgICAgICAg
ICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlv
bihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0
aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwogICAg
ICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbklt
cG9ydCkpCiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbkltcG9y
dDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YQogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
KTsKICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQp
OwogICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24g
PSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQo
KTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9y
dEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIG1fc3RhcnRG
dW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29k
ZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVu
Y3Rpb25JbmRleFNwYWNlKTsKQEAgLTI1MSw3ICsyNTEsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAg
dWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwogICAg
ICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxl
LT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBv
cnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlv
bkluZGV4KS0+Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25J
bXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5j
dGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1
bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1i
bHlGdW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBz
ZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305377</attachid>
            <date>2017-03-25 09:13:34 -0700</date>
            <delta_ts>2017-03-26 23:39:09 -0700</delta_ts>
            <desc>works but needs tests</desc>
            <filename>bug-169187-20170325091333.patch</filename>
            <type>text/plain</type>
            <size>212933</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YmVhYjMwZWVhZjQwZWZiMDU5MTE0YWZhMmRiNjljNmMwZjcwNGFkLi4wMThiYzEwYjkyN2NjNGEz
YjA0NDkzYTNlYmJhY2FkODc2YWZjOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzEgQEAKKzIwMTctMDMtMjUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxT
d2VlcGVyOjpzY2hlZHVsZVRpbWVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVy
OjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
Lmg6CisgICAgICAgICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHA6CisgICAgICAgIChK
U0M6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcik6CisgICAgICAg
ICogaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAg
ICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKHByaW50SW50ZXJu
YWwpOgorICAgICAgICAoZnVuY3Rpb25Bc3luY1Rlc3QpOgorICAgICAgICAoZnVuY3Rpb25Bc3lu
Y1Rlc3RQYXNzZWQpOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyk6
CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMpOgorICAgICAgICAocnVuSlND
KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VE
ZWZlcnJlZDo6cmVqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg6
CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpwcm9taXNlQXN5bmNQZW5kaW5nKToK
KyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAuCisgICAgICAgIChKU0M6OkpTUnVu
TG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVy
OjpzZXRSdW5Mb29wKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BU
aW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUpOgorICAg
ICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6
OkpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRp
bWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24pOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayk6CisgICAgICAgICogcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmguCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHdhc20vSlNXZWJB
c3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6OnJlamVjdCk6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlNDOjpyZXNvbHZlKToKKyAgICAgICAgKEpT
Qzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpjb21waWxlQW5kSW5zdGFudGlhdGUpOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyk6CisgICAgICAgIChKU0M6
OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6ZWQpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpwcm9taXNlKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FsbGVlcyk6CisgICAgICAgICogd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6Om1lbW9yeUtpbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21G
b3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmludGVybmFs
RnVuY3Rpb25Db3VudCk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptYXhpbXVtKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jlc2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6
Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzdGF0ZVN0
cmluZyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Om1vdmVUb1N0YXRlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwcmVwYXJlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENvdW50
SG9sZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6On5U
aHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVGdW5j
dGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OndhaXRGb3JDb21wbGV0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6cnVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5pdGlhbGl6
ZUNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxh
bjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9k
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnNldE1vZGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVycm9yTWVzc2FnZSk6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNCZWVuUHJlcGFy
ZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW5JbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmguCisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21Xb3Jr
bGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6cHJpb3JpdHlT
dHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6UXVldWVFbGVtZW50OjptdWx0
aVRocmVhZGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6
bmV4dFByaW9yaXR5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuRm9yUHJvbWlzZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpXb3JrbGlzdCk6CisgICAgICAgIChKU0M6Oldh
c206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpleGlzdGluZ1dv
cmtsaXN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5zdXJlV29ya2xpc3QpOgorICAg
ICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpX
b3JrbGlzdDo6bmV4dFRpY2tldCk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpDb21w
YXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxs
ZWUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKToKKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OmNyZWF0
ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjphZGRVbml0aWFs
aXplZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Zmlu
YWxpemVDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpydW5uYWJsZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjppbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp0
YWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rp
b25zKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRJbXBvcnRGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0
VGFibGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjphZGRDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
c291cmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6dGFrZVJlc2VydmVk
TWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlSW5zdGFuY2UpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3I6OmNyZWF0ZU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5r
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmg6CisKIDIwMTctMDMtMjIg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10g
VXNlIGpzTm9udHJpdmlhbFN0cmluZyBmb3IgTnVtYmVyIHRvU3RyaW5nIG9wZXJhdGlvbnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODVlMThkNTViZDEzOGI5MTdhMzI1Nzg4NWJk
ZWUzOTM5NDM5ZTM3Zi4uY2FiOTczMWJjOTY5M2RiZmFhNDc0NTZjYmExMzgxNjcxMTg5ZTEzMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMTYsMTEgKzEzMTYsMTcgQEAKIAkJ
NTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIz
ODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3Jr
bGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMw
RkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OworCQk1MzBGQjMw
NDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBX
YXNtV29ya2xpc3QuY3BwICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2Fz
bVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEzNzRCRjFE
NUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFu
LmNwcCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURFMURDN0Y0
NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzAxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
Y3BwICovOyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hl
Y2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsg
fTsKKwkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNE
MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgfTsKKwkJNTM0NjM4NzMxRTcwRDAxNTAw
RjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BU
aW1lci5jcHAgKi87IH07CisJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVm
ZXJyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggKi87
IH07CisJCTUzNDYzODc3MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3
NjFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICovOyB9OwogCQk1
MzQ4NkJCNzFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ4NkJCNjFDMTc5NUMzMDBGNkYzQUYg
LyogSlNUeXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwogCQk1MzQ4NkJCQjFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkJBMUMx
OEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwICovOyB9OwogCQk1MzQ5MDI4NTFDNzI3
NkI3MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDkwMjgyMUM3MjQyQzgwMDEyQkNCOCAvKiBUeXBl
ZEFycmF5Q1Rlc3QuY3BwICovOyB9OwpAQCAtMTM1NSw2ICsxMzYxLDcgQEAKIAkJNTNGNDBFOTUx
RDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRTk3MUQ1QTdCRUMwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNw
cCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjhEMUZGMUU4
Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLzsgfTsKIAkJNTNGQTJBRTExQ0Yz
N0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
QTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CiAJCTUzRkQw
NEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDExRDdBQjE4NzAw
MzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07CkBAIC0xNjM4LDYgKzE2
NDUsNyBAQAogCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5NTBFRDFEM0FFMDBG
MUY2ODEgLyogT3Bjb2RlLmggKi87IH07CiAJCTk3ODgwMTQwMTQ3MUFEOTIwMDQxQjAxNiAvKiBK
U0RhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3ODhGQzIyMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmNwcCAqLzsgfTsKIAkJ
OTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0UyRCAv
KiBKU0RhdGVNYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJOTgxRUQ4MjMyODIzNEQ5MUJBRUNDQURFIC8qIE1hY2hpbmVDb250ZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyODgwNkUyMTE1NUU0
NzhBOTNGQTdCMDIgLyogTWFjaGluZUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OTBEQTY3RjFDOEUzMTZBMDAyOTUxNTkgLyogZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwREE2N0UxQzhF
MzExRDAwMjk1MTU5IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19p
bXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5OTI4RkYzQjE4QUM0QUVDMDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyOEZGMzkx
OEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCAqLzsgfTsKIAkJOTkyOEZGM0Mx
OEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTI4RkYzQTE4QUM0QUVDMDBCOENGMTIgLyogSlNS
ZXBsYXlJbnB1dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjIzMCw4ICsyMjM4LDYgQEAKIAkJQzJDRjM5QzExNkUxNUE4MTAwREQ2OUJFIC8q
IEpTQVBJV3JhcHBlck9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmpl
Y3QubW0gKi87IH07CiAJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJP
YmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
Q0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKIAkJ
QzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYg
LyogSGVhcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRTUyNkJCMTU5MEVG
MDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovOyB9OwotCQlDMkU1MjZCRTE1OTBFRjAwMDA1
NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDExNkJB
RUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBT
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07CiAJCUMyRkNBRTEwMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNC
bG9jay5jcHAgKi87IH07CiAJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJh
c2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjQ0MSw3ICsyNDQ3
LDYgQEAKIAkJRkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUU0M0ZDRDFFNjY0
MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3Qu
Y3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZD
NTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTgxRUQ4MjMyODIzNEQ5MUJBRUNDQURF
IC8qIE1hY2hpbmVDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyODgwNkUyMTE1NUU0NzhBOTNGQTdCMDIgLyogTWFjaGluZUNvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBz
ZWN0aW9uICovCkBAIC0zNzMyLDYgKzM3MzcsNyBAQAogCQkyNjQwOTFGQTFCRTJGRDQxMDA2ODRE
QjIgLyogQWlyT3Bjb2RlLm9wY29kZXMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQWlyT3Bjb2RlLm9wY29kZXM7IHBhdGggPSBi
My9haXIvQWlyT3Bjb2RlLm9wY29kZXM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2
ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRoID0gYjMvYWlyL0FpckxpdmVuZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OUQ2MzZEMUJGQkU1RDAwMDEwMUIx
RCAvKiBGVExPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3V0
cHV0Lmg7IHBhdGggPSBmdGwvRlRMT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTI4ODA2RTIxMTU1RTQ3OEE5M0ZBN0IwMiAvKiBNYWNoaW5lQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoaW5lQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMTExMjQzMTkyRkNFNzkwMDVFRTE4
RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM3OTcsMTEgKzM4MDMsMTcgQEAKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8q
IFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyog
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29y
a2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdvcmtsaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbVdvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMzc0QkMx
RDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJF
MUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSdW5Mb29w
VGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIxRTcwRDAxNTAw
RjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQ
cm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8q
IFR5cGVkQXJyYXlDVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBUeXBlZEFycmF5Q1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJyYXlDVGVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQyLDYgKzM4NTQsNyBAQAogCQk1
M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVQ
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBB
MDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjEx
MTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFF
MDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ3ODIsOCArNDc5NSw2IEBACiAJCUMyQ0YzOUJGMTZFMTVBODEwMERE
NjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAv
KiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQjE1OTBFRjAwMDA1
NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyRTUyNkJD
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBG
MkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FF
MEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUwMzksNyArNTA1MCw2IEBACiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21w
YXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1
MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3Rz
L0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZE
NkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyODgwNkUyMTE1NUU0NzhBOTNGQTdCMDIgLyogTWFjaGluZUNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWFjaGluZUNvbnRleHQuaDsgcGF0aCA9
IE1hY2hpbmVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KQEAgLTU4OTksOCArNTkwOSw2IEBACiAJCQkJQTU0QzJBQUYxQzY1NDRE
MTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovLAogCQkJCUE1MzExQzM0MUM3N0NFQUMwMEU2
QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLywKIAkJCQlBNTMxMUMzNTFDNzdDRUFD
MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oICovLAotCQkJCUMyRTUyNkJCMTU5MEVG
MDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAotCQkJCUMyRTUyNkJDMTU5MEVGMDAwMDU0
RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyog
SGVhcFV0aWwuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50
YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVt
ZW50YWxTd2VlcGVyLmggKi8sCkBAIC02MjY2LDExICs2Mjc0LDE0IEBACiAJCQkJNTNGNDBFOEMx
RDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUw
MDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5oICovLAorCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNt
UGxhbklubGluZXMuaCAqLywKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNl
Y3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1
cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJl
LmggKi8sCiAJCQkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAg
Ki8sCiAJCQkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5oICovLAor
CQkJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovLAorCQkJ
CTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NDI3LDYgKzY0
MzgsOCBAQAogCQkJCTE0QTE1NjMwMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNo
ZS5oICovLAogCQkJCUJDRDIwMzQ3MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmNw
cCAqLywKIAkJCQlCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5oICov
LAorCQkJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5j
cHAgKi8sCisJCQkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmggKi8sCiAJCQkJMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVByb3BlcnR5
QXR0cmlidXRlcy5oICovLAogCQkJCTBGRTA1MDBGMUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RB
cmd1bWVudHMuY3BwICovLAogCQkJCTBGRTA1MDEwMUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RB
cmd1bWVudHMuaCAqLywKQEAgLTY4MTUsNiArNjgyOCw4IEBACiAJCQkJMEY3QzM5RkMxQzhGNjU5
NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcw
NkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcw
NkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzIxRTcwRDAx
NTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3MDFFNzBDRjNE
MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQk3MEIwQTlEMDFBOUI2NjIwMDAw
MTMwNkEgLyogUnVudGltZUZsYWdzLmggKi8sCiAJCQkJNTI3NzczREQxQUFGODNBQzAwQkRFN0U4
IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLywKIAkJCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyog
UnVudGltZVR5cGUuaCAqLywKQEAgLTgxMDgsNiArODEyMyw3IEBACiAJCQkJMEZFQzg1MDYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDggLyogQjND
b21waWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMjcsNiArODI0Myw3IEBACiAJCQkJQkMxOEMz
RUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0
QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZm
bGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyog
Q2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODUxMyw2ICs4NTMw
LDcgQEAKIAkJCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyogRE9NSklU
SGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0MwOEUzQzFEQTQxQjgxMDAzOTQ3OEYg
LyogRE9NSklUUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzExRTcwQ0Yz
RDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNTZE
RTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM3QUQ4
M0MxREE0OTI4NjAwRjNENDEyIC8qIERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzN0FEODNEMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRSZWcuaCBpbiBIZWFk
ZXJzICovLApAQCAtODY4MSw3ICs4Njk5LDYgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0MDA2MEE5
NjMgLyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFDNjU0NEYy
MDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMxMUMzNjFD
NzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZh
bHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzAsNiArOTE0Nyw3IEBACiAJCQkJQkMxOEM0NUEw
RTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0Yx
MUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Qy
MDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1
Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAv
KiBSZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3
QTUzMTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5NDksNiArOTk2Nyw3IEBA
CiAJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMEZCMzA0MUU3QTExNDYw
MDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MjJBNjIx
QzE1OEU2QTAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMzM4REY1MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0Miw2ICsxMDI2MSw3IEBACiAJCQkJMTRBRDkx
MTcxRENBOTdGRDAwMTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3MzQxRTIxREMyQ0U5NjAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1NDk4MjAzMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTM0NjM4NzMxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRp
bWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMw
IC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMkRF
MEYxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xMDMxOSw3ICsxMDMzOSw2IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYzIC8qIEhl
YXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVFMDBBMThE
NzggLyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NF
Q0EwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUMyRTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElDU3RhdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8qIElkZW50
aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDY0Myw2ICsxMDY2Miw3IEBACiAJCQkJOTky
QUJDRjkxQkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTkyRjU2QjQxRTRFODRBNDAwMzU5NTNCIC8qIFJlbW90ZUNvbm5lY3Rp
b25Ub1RhcmdldENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4RUQ2NzQxQkVENzBBQzAw
REQ4MDE3IC8qIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90ZUluc3Bl
Y3Rpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NTY2ODYxRTRFOEIwRjAwQUFF
MTNDIC8qIFJlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNTFF
NEU4NEE4MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFj
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKaW5k
ZXggZGRlZTI1ODNlNDllNmI5NjkzOTA4MGUzMzhlYjVhOTljMDQwYjkyYy4uZmE3YjY0ZGE5YzQz
MWY3ZjAyMTgxN2JiOTRhOTQ5NmYxNmVjMTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1l
ci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRikKQEAgLTQwLDggKzQw
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOwogY2xh
c3MgSGVhcDsKIAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrIDog
cHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2Fs
bGJhY2sgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHR5cGVkZWYgSlNS
dW5Mb29wVGltZXIgQmFzZTsKICAgICBzdGF0aWMgUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5Q2FsbGJh
Y2s+IGNyZWF0ZUZ1bGxUaW1lcihIZWFwKik7CiAgICAgc3RhdGljIFJlZlB0cjxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IGNyZWF0ZUVkZW5UaW1lcihIZWFwKik7CiAKQEAgLTcwLDIxICs3MSwyMSBAQCBw
cm90ZWN0ZWQ6CiAKICNpZiBVU0UoQ0YpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkK
LSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBt
X2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsKICAgICB9
CiAjZWxpZiBVU0UoR0xJQikKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQotICAgICAg
ICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxl
ZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiAgICAgewogICAgIH0KICNlbHNl
CiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0p
CisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICB7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDYzOTYxMjhkMDM4MzhjYTRhNzQ1NTBlZDkxNmRmNzdhMzI1ZDZi
NDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKLQotI2lu
Y2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBl
ci5oIgotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGliLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgCi1jb25zdCBDRlRp
bWVJbnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7
Ci0KLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBt
X2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCi17Ci0gICAgc2V0UnVuTG9vcCh2bS0+aGVhcC5ydW5M
b29wKCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVu
TG9vcCkKLXsKLSAgICBpZiAobV9ydW5Mb29wKSB7Ci0gICAgICAgIENGUnVuTG9vcFJlbW92ZVRp
bWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVz
KTsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwotICAg
ICAgICBtX3J1bkxvb3AuY2xlYXIoKTsKLSAgICAgICAgbV90aW1lci5jbGVhcigpOwotICAgIH0K
LSAgICAKLSAgICBpZiAocnVuTG9vcCkgewotICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOwot
ICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4
dCkpOwotICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7Ci0gICAgICAgIG1fdGltZXIgPSBh
ZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNfZGVjYWRl
LCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsK
LSAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgp
LCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIH0KLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRp
bWVyKCkKLXsKLSAgICBzZXRSdW5Mb29wKDApOwotfQotCi12b2lkIEhlYXBUaW1lcjo6dGltZXJE
aWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotewotICAgIEhlYXBU
aW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihjb250ZXh0UHRyKTsKLSAgICB0
aW1lci0+bV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBSZWZQdHI8Vk0+IHZtID0gdGltZXItPm1f
YXBpTG9jay0+dm0oKTsKLSAgICBpZiAoIXZtKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBoYXMgYmVl
biBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIHRpbWVyLT5t
X2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgewotICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKLSAgICAgICAgdGltZXItPmRvV29y
aygpOwotICAgIH0KLQotICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12b2lk
IEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17Ci0g
ICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7Ci0gICAgbV9pc1NjaGVkdWxl
ZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci0gICAgQ0ZS
dW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCkgKyBzX2RlY2FkZSk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOwotfQot
Ci0jZWxpZiBVU0UoR0xJQikKLQotY29uc3QgbG9uZyBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAg
KiA2MCAqIDI0ICogMzY1ICogMTA7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgaGVhcFRpbWVyU291
cmNlRnVuY3Rpb25zID0gewotICAgIG51bGxwdHIsIC8vIHByZXBhcmUKLSAgICBudWxscHRyLCAv
LyBjaGVjawotICAgIC8vIGRpc3BhdGNoCi0gICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5jIGNh
bGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAgICAgIHJl
dHVybiBjYWxsYmFjayh1c2VyRGF0YSk7Ci0gICAgfSwKLSAgICBudWxscHRyLCAvLyBmaW5hbGl6
ZQotICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKLSAgICBudWxscHRyLCAvLyBjbG9z
dXJlX21hcnNoYWxsCi19OwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0gICAgOiBt
X3ZtKHZtKQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotICAgICwgbV90aW1lcihh
ZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihH
U291cmNlKSkpKQotewotICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCksICJbSmF2
YVNjcmlwdENvcmVdIEhlYXBUaW1lciIpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3Rp
bWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewotICAgICAgICBh
dXRvJiBoZWFwVGltZXIgPSAqc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4odXNlckRhdGEpOwotICAg
ICAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShoZWFwVGltZXIubV90aW1lci5nZXQoKSwgZ19n
ZXRfbW9ub3RvbmljX3RpbWUoKSArIEhlYXBUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NF
Qyk7Ci0gICAgICAgIGhlYXBUaW1lci50aW1lckRpZEZpcmUoKTsKLSAgICAgICAgcmV0dXJuIEdf
U09VUkNFX0NPTlRJTlVFOwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0
dGFjaChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7
Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci0gICAgZ19zb3VyY2VfZGVzdHJveSht
X3RpbWVyLmdldCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSgpCi17Ci0g
ICAgbV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkgewotICAg
ICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZl
IHVwLgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOwotICAgICAgICBk
b1dvcmsoKTsKLSAgICB9Ci0KLSAgICBtX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12b2lkIEhl
YXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17Ci0gICAg
Z19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3Rp
bWUoKSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1faXNTY2hl
ZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQotewotICAg
IGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190
aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1bGVkID0g
ZmFsc2U7Ci19Ci0jZWxzZQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAgIDogbV92
bSh2bSkKLXsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLX0KLQotdm9pZCBIZWFw
VGltZXI6OmludmFsaWRhdGUoKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1l
cihkb3VibGUpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci19Ci0j
ZW5kaWYKLSAgICAKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI0NzFmNjBkYjhj
NjM3NGM1NTAxOThkMGJlOWUyZmNjYThhNmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5o
CisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRl
IDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEpTTG9jazsKLWNsYXNzIFZNOwotCi1jbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SGVhcFRpbWVyPiB7Ci1wdWJsaWM6Ci0gICAgSGVhcFRpbWVyKFZNKik7Ci0j
aWYgVVNFKENGKQotICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJl
Ziwgdm9pZCopOwotI2VuZGlmCi0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+
SGVhcFRpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKLQotICAgIHZvaWQg
c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIHZvaWQgY2FuY2Vs
VGltZXIoKTsKLSAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NjaGVk
dWxlZDsgfQotCi0jaWYgVVNFKENGKQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UnVu
TG9vcChDRlJ1bkxvb3BSZWYpOwotI2VuZGlmIC8vIFVTRShDRikKLSAgICAKLXByb3RlY3RlZDoK
LSAgICBWTSogbV92bTsKLQotICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLSAgICBib29s
IG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgY29uc3Qg
Q0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJS
ZWY+IG1fdGltZXI7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29wOwotICAg
IAotICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7Ci0KLSAgICBMb2NrIG1fc2h1
dGRvd25NdXRleDsKLSNlbGlmIFVTRShHTElCKQotICAgIHN0YXRpYyBjb25zdCBsb25nIHNfZGVj
YWRlOwotICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3Rp
bWVyOwotI2VuZGlmCi0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2MzU2Njk0
MTFlMTdkYzBhYzUyLi44Y2JmYTllODA0MGRjNjFlZmIwMTliMjE0NTU0NDU1ZTJmYTgzMWI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAKQEAgLTQxLDExICs0MSwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGltZU11bHRp
cGxpZXIgPSAxLjAgLyBzd2VlcFRpbWVUb3RhbDsKIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6
OnNjaGVkdWxlVGltZXIoKQogewotICAgIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihzd2VlcFRp
bWVTbGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOworICAgIEJhc2U6OnNjaGVkdWxlVGltZXIo
c3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKIH0KIAogSW5jcmVtZW50YWxT
d2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBUaW1lciho
ZWFwLT52bSgpKQorICAgIDogQmFzZShoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50QWxsb2Nh
dG9yKG51bGxwdHIpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5oCmluZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3Yzc4OWE2YWUxMTk4
MDNiZTYuLmRmMWNmYzkyNDk2YTdkYTQ2NjEwZWFhMmY3NTZmZDNjYTVhYjVkYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5j
bHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEhlYXA7
CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAKLWNsYXNzIEluY3JlbWVudGFsU3dlZXBlciA6IHB1
YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEpTUnVu
TG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTd2VlcGluZygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCmluZGV4
IDZlMzE3NmMyY2M3NmI2ODQ0YzNhZmViMDczYzZiY2ExM2Y0NWQzY2MuLjk0MGQzOWRlMjRhY2Zk
MzJkOTZhNGFjMjFlZDJjMmE1MzE3YzIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGlt
ZXIoVk0qIHZtKQotICAgIDogSGVhcFRpbWVyKHZtKQorICAgIDogQmFzZSh2bSkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGlt
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgK
aW5kZXggYTY4MzE4NDc0ODljODZjMzZiNjg5ZTE4ZGEwNDg2M2ExZTRlZTQ0NS4uZmViZjUxNmFm
NTQ4NGIwY2JkMDgwNmQ0Y2MzNDlkOTc0OTdiZjI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCkBAIC0yNSwxNCArMjUsMTUgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1
bkxvb3BUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAotY2xhc3Mg
U3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIFN0b3BJZk5l
Y2Vzc2FyeVRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgZXhwbGljaXQgU3RvcElmTmVjZXNzYXJ5VGlt
ZXIoVk0qKTsKICAgICAKICAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAppbmRleCAyNjVhN2NhOGEzNTU4NzlhMGE5MjBlZTZlZDMxNGRlYmRkZmFlY2Y1Li5iNTdh
YjE2NjU4Yzc0MDUwMGUyMjM5ODJhNzI5ZDQwN2JjOTg0OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiUGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGlu
Z1Byb2ZpbGVyLmgiCkBAIC03Myw4ICs3NCw5IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxz
LmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9y
eS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlz
dC5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxz
dGRpby5oPgpAQCAtOTA3LDggKzkwOSw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRHZXR0ZXJD
b21wbGV4OjpzX2luZm8gPSB7ICJET01KSVRHZXR0ZXJDb21wbGV4IiwgJkJhc2U6OnNfCiBjb25z
dCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUpJVEZ1bmN0
aW9uT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShE
T01KSVRGdW5jdGlvbk9iamVjdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNf
aW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogY29uc3QgQ2xhc3NJbmZvIFNpbXBsZU9iamVj
dDo6c19pbmZvID0geyAiU2ltcGxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShTaW1wbGVPYmplY3QpIH07Ci1zdGF0aWMgYm9vbCB0ZXN0MjYyQXN5
bmNQYXNzZWQgeyBmYWxzZSB9Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jVGVzdCB7IGZhbHNl
IH07CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0UGFzc2VzIHsgMCB9Oworc3RhdGljIHVuc2ln
bmVkIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzIHsgMCB9OwogCiBFbGVtZW50SGFuZGxlT3duZXIq
IEVsZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsKQEAgLTEwNzcsNiArMTA3OSw4IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNr
VHJhY2VzKEV4ZWNTdGF0CiAjZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkKEV4
ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3Rh
dGUqKTsKQEAgLTEzNDksNiArMTM1Myw5IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBhZGRGdW5j
dGlvbih2bSwgIm1heEFyZ3VtZW50cyIsIGZ1bmN0aW9uTWF4QXJndW1lbnRzLCAwKTsKIAorICAg
ICAgICBhZGRGdW5jdGlvbih2bSwgImFzeW5jVGVzdCIsIGZ1bmN0aW9uQXN5bmNUZXN0LCAxKTsK
KyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RQYXNzZWQiLCBmdW5jdGlvbkFzeW5j
VGVzdFBhc3NlZCwgMSk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMiLCBmdW5jdGlvblRlc3RXYXNtTW9k
dWxlRnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAtMTczMiwxMSArMTczOSwxMiBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEZJTEUqIG91dCkK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmICh0ZXN0MjYyQXN5bmNUZXN0KSB7CisgICAgaWYgKGFzeW5j
VGVzdEV4cGVjdGVkUGFzc2VzKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1
bWVudCgwKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkgJiYgV1RGOjplcXVhbChhc1N0
cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRlc3QyNjI6QXN5bmNUZXN0Q29tcGxl
dGUiKSkKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Bhc3NlZCA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGlmICh2YWx1ZS5p
c1N0cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKS5pbXBs
KCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpIHsKKyAgICAgICAgICAgIGFzeW5jVGVz
dFBhc3NlcysrOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtMzA0OSw2ICszMDU3LDI1IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7
CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rlc3QoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBudW1iZXJPZkFzeW5j
UGFzc2VzID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFudW1iZXJPZkFzeW5jUGFzc2Vz
LmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYSB1aW50MzIiKSk7CisKKyAg
ICBhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9IG51bWJlck9mQXN5bmNQYXNzZXMuYXNVSW50MzIo
KTsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQoRXhlY1N0YXRlKikKK3sKKyAg
ICBhc3luY1Rlc3RQYXNzZXMrKzsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9
CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIHN0YXRpYyBDU3RyaW5nIHZhbHVlV2l0aFR5
cGVPZldhc21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNW
YWx1ZSB3YXNtVmFsdWUpCkBAIC0zMTU5LDIxICszMTg2LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0
YXRlKiBlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsg
MikKICAgICAgICAgQ1JBU0goKTsKIAotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihzb3VyY2UtPnZlY3RvcigpKSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAg
cGxhbi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4o
ImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBsYW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJl
ZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oc291cmNlLT52ZWN0b3IoKSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206
OlBsYW46OkZ1bGxDb21waWxlLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUobnVsbHB0ciwgbWFrZVJlZihwbGFuLmdldCgpKSk7
CisgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkp
IHsKKyAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFuLT5l
cnJvck1lc3NhZ2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgaWYgKHBsYW4u
aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKKyAgICBpZiAocGxhbi0+
aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0go
KTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIga2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0g
VUlOVF9NQVg7Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXplQ2FsbGVlcygKICAgICAgICAg
ICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50
cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUp
IHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxl
ZUluZGV4IC0gMSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVu
ZChqc0VudHJ5cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMjA5LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhF
eGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjYWxsZWVJbmRleDsKICAg
ICAgICAgICAgIH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24o
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUlu
Zm9ybWF0aW9uID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMzY2Myw3ICszNjkxLDcgQEAgdm9p
ZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXN0MjYyLWFzeW5jIikpIHsK
LSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Rlc3QgPSB0cnVlOworICAgICAgICAgICAgYXN5bmNU
ZXN0RXhwZWN0ZWRQYXNzZXMrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
QEAgLTM3MzUsMjMgKzM3NjMsMzQgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBj
b25zdCBGdW5jJiBmdW5jKQogICAgIFdvcmtlciB3b3JrZXIoV29ya2Vyczo6c2luZ2xldG9uKCkp
OwogICAgIAogICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcigmdm0pOwotCiAgICAgaW50IHJlc3VsdDsKLSAgICBpZiAo
b3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAg
dm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9maWxlcjo6RGF0
YWJhc2U+KHZtKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgeworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFs
T2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051
bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOwotICAgIGdsb2JhbE9iamVjdC0+c2V0UmVtb3Rl
RGVidWdnaW5nRW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVidWdnaW5nKTsKLSAgICBi
b29sIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChvcHRpb25zLm1f
aW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKLSAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICF2bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIpCisgICAgICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFByb2ZpbGVyOjpEYXRhYmFzZT4odm0pOwogCi0gICAgdm0uZHJhaW5NaWNyb3Rh
c2tzKCk7Ci0gICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAodGVzdDI2MkFzeW5jVGVzdCA9PSB0ZXN0
MjYyQXN5bmNQYXNzZWQpID8gMCA6IDM7CisgICAgICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBqc051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOworICAgICAgICBnbG9iYWxP
YmplY3QtPnNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQob3B0aW9ucy5tX2VuYWJsZVJlbW90ZURl
YnVnZ2luZyk7CisgICAgICAgIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICBpZiAob3B0aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCisgICAgICAgICAgICBy
dW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOworCisgICAgICAgIHZtLmRyYWluTWljcm90YXNr
cygpOworICAgIH0KKyNpZiBVU0UoQ0YpCisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnJ1
blJ1bkxvb3AoKTsKKyNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMubV9leGl0Q29kZSkKLSAgICAg
ICAgcHJpbnRmKCJqc2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsKKyAgICByZXN1bHQgPSBzdWNj
ZXNzICYmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9PSBhc3luY1Rlc3RQYXNzZXMpID8gMCA6
IDM7CisKKyAgICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKSB7CisgICAgICAgIHByaW50ZigianNj
IGV4aXRpbmcgJWQiLCByZXN1bHQpOworICAgICAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNz
ZXMgIT0gYXN5bmNUZXN0UGFzc2VzKQorICAgICAgICAgICAgcHJpbnRmKCIgYmVjYXVzZSBleHBl
Y3RlZDogJWQgYXN5bmMgdGVzdCBwYXNzZXMgYnV0IGdvdDogJWQgYXN5bmMgdGVzdCBwYXNzZXMi
LCBhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcywgYXN5bmNUZXN0UGFzc2VzKTsKKyAgICAgICAgcHJp
bnRmKCJcbiIpOworICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSkgewogICAgICAg
ICBpZiAoIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmlsZXJP
dXRwdXQudXRmOCgpLmRhdGEoKSkpCkBAIC0zNzU5LDI0ICszNzk4LDI4IEBAIGludCBydW5KU0Mo
Q29tbWFuZExpbmUgb3B0aW9ucywgY29uc3QgRnVuYyYgZnVuYykKICAgICB9CiAKICNpZiBFTkFC
TEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkpCi0gICAgICAgIHBy
aW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1i
ZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgYm9vbCBmaXJlQXRFbmFibGVkID0KLSAg
ICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQoKSB8fCBPcHRpb25zOjpm
aXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFmdGVyKCk7Ci0gICAgaWYgKE9wdGlvbnM6
OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmlyZUF0RW5hYmxlZCB8fCBPcHRp
b25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkpKQotICAgICAgICBwcmludGYo
IkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5jb3VudGVyZWQgJXUgY2hlY2tzLlxu
IiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgaWYgKE9w
dGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKLSAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQg
RlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIsIG51bWJlck9mU3RhdGljT1NS
RXhpdEZ1enpDaGVja3MoKSk7Ci0gICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElUIEZVWlo6IGVu
Y291bnRlcmVkICV1IGR5bmFtaWMgY2hlY2tzLlxuIiwgbnVtYmVyT2ZPU1JFeGl0RnV6ekNoZWNr
cygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBpbGVUaW1lU3RhdHMgPSBKSVQ6OmNvbXBpbGVU
aW1lU3RhdHMoKTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGlsZVRpbWVLZXlzOwotICAgIGZv
ciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQotICAgICAgICBjb21waWxlVGltZUtl
eXMuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdp
bigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOwotICAgIGZvciAoQ1N0cmluZyBrZXkgOiBjb21w
aWxlVGltZUtleXMpCi0gICAgICAgIHByaW50ZigiJTQwczogJS4zbGYgbXNcbiIsIGtleS5kYXRh
KCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIHsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkp
CisgICAgICAgICAgICBwcmludGYoIkpTQyBFWENFUFRJT04gRlVaWjogZW5jb3VudGVyZWQgJXUg
Y2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tzKCkpOworICAgICAgICBib29s
IGZpcmVBdEVuYWJsZWQgPQorICAgICAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFm
dGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enoo
KSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9zZUV4ZWN1dGFibGVBbGxvY2F0
aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVYRUNVVEFCTEUgQUxMT0NBVElP
TiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU9TUkV4aXRGdXp6
KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElUIEZVWlo6IGVuY291bnRlcmVk
ICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09TUkV4aXRGdXp6Q2hlY2tzKCkp
OworICAgICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUg
ZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29tcGlsZVRpbWVTdGF0cyA9IEpJVDo6Y29t
cGlsZVRpbWVTdGF0cygpOworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGlsZVRpbWVLZXlz
OworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tcGlsZVRpbWVTdGF0cykKKyAgICAgICAg
ICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAgc3RkOjpzb3J0
KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOworICAgICAg
ICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlzKQorICAgICAgICAgICAgcHJpbnRm
KCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5
KSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6Z2NBdEVuZCgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAK
aW5kZXggNjk2N2UwM2FmZTE1NDI0NGQxZTJkMGNiMDNhNDYxMDg5NDA1MDFkNS4uMWRhMDYwMWY4
OTc4ZTEwZmY4OTNjYTMxZTFiM2U4ZmJkZDI1MmM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgog
I2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVy
cmVkVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk5LDExICsxMDAsMTUgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVu
Y3Rpb24sIEpTVmFsdWUgdmFsdWUKIHZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNhbGxGdW5jdGlvbihleGVjLCBt
X3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1BlbmRpbmcgPSBleGVjLT52bSgp
LnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJvbWlzZSh0aGlzKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0gbV9wcm9taXNlSXNBc3luY1Bl
bmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHJlYXNvbikKIHsKICAgICBjYWxsRnVuY3Rpb24oZXhlYywgbV9yZWplY3Qu
Z2V0KCksIHJlYXNvbik7CisgICAgYm9vbCB3YXNQZW5kaW5nID0gZXhlYy0+dm0oKS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhpcyk7CisgICAgQVNTRVJUX1VO
VVNFRCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlzZUlzQXN5bmNQZW5kaW5nKTsK
IH0KIAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uKiByZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlRGVmZXJyZWQuaAppbmRleCAyNmY0YTgyZDA4Y2EwMjIwZWRkNTE5Njg1Mjk4MjJiY2Fi
OWFjNmZkLi4wOTIyYTk0ZDkzM2NjZWM1OWE0YTE3ZmNiZDIyYzM3MjNkYTUwY2U2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKQEAg
LTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlamVj
dChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlamVj
dChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIHBy
b21pc2VBc3luY1BlbmRpbmcoKSB7IG1fcHJvbWlzZUlzQXN5bmNQZW5kaW5nID0gdHJ1ZTsgfQor
I2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2VEZWZlcnJlZChWTSYsIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCosIEpTVmFsdWUsIEpT
VmFsdWUpOwpAQCAtNjQsNiArNjgsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBKU1By
b21pc2VEZWZlcnJlZChWTSYpOwogCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9wcm9taXNl
SXNBc3luY1BlbmRpbmcgeyBmYWxzZSB9OworI2VuZGlmCisKICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fcHJvbWlzZTsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZXNvbHZlOwog
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjdhOWM3YmVm
MzQxZmI5ZjA0MWYzOTVkNTBhYzYxZjQ5NzViNTBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCkBAIC0wLDAgKzEsMTk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCisKKyNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1N0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDxnbGliLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0YpCisKK2NvbnN0IENGVGltZUlu
dGVydmFsIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEw
OworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorICAgIDogbV92bSh2
bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKK3sKKyAgICBzZXRSdW5Mb29wKHZt
LT5oZWFwLnJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNldFJ1bkxvb3Ao
Q0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCit7CisgICAgaWYgKG1fcnVuTG9vcCkgeworICAgICAgICBD
RlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1
bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3Rp
bWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7CisgICAgICAgIG1fdGltZXIu
Y2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAocnVuTG9vcCkgeworICAgICAgICBtX3J1bkxvb3Ag
PSBydW5Mb29wOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9v
cFRpbWVyQ29udGV4dCkpOworICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7CisgICAgICAg
IG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHNfZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmly
ZSwgJm1fY29udGV4dCkpOworICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0
KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgfQorfQorCitK
U1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAgICBzZXRSdW5Mb29wKDApOwor
fQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYs
IHZvaWQqIGNvbnRleHRQdHIpCit7CisgICAgSlNSdW5Mb29wVGltZXIqIHRpbWVyID0gc3RhdGlj
X2Nhc3Q8SlNSdW5Mb29wVGltZXIqPihjb250ZXh0UHRyKTsKKyAgICB0aW1lci0+bV9hcGlMb2Nr
LT5sb2NrKCk7CisKKyAgICBSZWZQdHI8Vk0+IHZtID0gdGltZXItPm1fYXBpTG9jay0+dm0oKTsK
KyAgICBpZiAoIXZtKSB7CisgICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNv
IHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9j
aygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgeworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtLmdldCgpKTsKKyAgICAgICAgdGltZXItPmRvV29yaygpOworICAgIH0KKwor
ICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVy
OjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKK3sKKyAgICBDRlJ1bkxv
b3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1
cnJlbnQoKSArIGludGVydmFsSW5TZWNvbmRzKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsK
K30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworICAgIENGUnVuTG9v
cFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3Vy
cmVudCgpICsgc19kZWNhZGUpOworICAgIG1faXNTY2hlZHVsZWQgPSBmYWxzZTsKK30KKworI2Vs
aWYgVVNFKEdMSUIpCisKK2NvbnN0IGxvbmcgSlNSdW5Mb29wVGltZXI6OnNfZGVjYWRlID0gNjAg
KiA2MCAqIDI0ICogMzY1ICogMTA7CisKK3N0YXRpYyBHU291cmNlRnVuY3MgSlNSdW5Mb29wVGlt
ZXJTb3VyY2VGdW5jdGlvbnMgPSB7CisgICAgbnVsbHB0ciwgLy8gcHJlcGFyZQorICAgIG51bGxw
dHIsIC8vIGNoZWNrCisgICAgLy8gZGlzcGF0Y2gKKyAgICBbXShHU291cmNlKiwgR1NvdXJjZUZ1
bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbgorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNhbGxiYWNrKHVzZXJEYXRhKTsKKyAgICB9LAorICAgIG51bGxwdHIsIC8vIGZp
bmFsaXplCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxsYmFjaworICAgIG51bGxwdHIsIC8v
IGNsb3N1cmVfbWFyc2hhbGwKK307CisKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihW
TSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQor
ICAgICwgbV90aW1lcihhZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZKU1J1bkxvb3BUaW1lclNvdXJj
ZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkpCit7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUo
bV90aW1lci5nZXQoKSwgIltKYXZhU2NyaXB0Q29yZV0gSlNSdW5Mb29wVGltZXIiKTsKKyAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1lci5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEp
IC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byYgcnVuTG9vcFRpbWVyID0gKnN0YXRpY19jYXN0
PEpTUnVuTG9vcFRpbWVyKj4odXNlckRhdGEpOworICAgICAgICBnX3NvdXJjZV9zZXRfcmVhZHlf
dGltZShydW5Mb29wVGltZXIubV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSAr
IEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKKyAgICAgICAgcnVu
TG9vcFRpbWVyLnRpbWVyRGlkRmlyZSgpOworICAgICAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElO
VUU7CisgICAgfSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fdGltZXIu
Z2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKK30KKworSlNSdW5M
b29wVGltZXI6On5KU1J1bkxvb3BUaW1lcigpCit7CisgICAgZ19zb3VyY2VfZGVzdHJveShtX3Rp
bWVyLmdldCgpKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKCkKK3sK
KyAgICBtX2FwaUxvY2stPmxvY2soKTsKKworICAgIGlmICghbV9hcGlMb2NrLT52bSgpKSB7Cisg
ICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdp
dmUgdXAuCisgICAgICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIobV92bSk7CisgICAgICAg
IGRvV29yaygpOworICAgIH0KKworICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3ZvaWQg
SlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQor
eworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90
b25pY190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNFQ19QRVJfU0VDKTsKKyAgICBt
X2lzU2NoZWR1bGVkID0gdHJ1ZTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGlt
ZXIoKQoreworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0
X21vbm90b25pY190aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKKyAgICBtX2lz
U2NoZWR1bGVkID0gZmFsc2U7Cit9CisjZWxzZQorSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRp
bWVyKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCit7Cit9CisKK0pTUnVuTG9vcFRpbWVyOjp+SlNS
dW5Mb29wVGltZXIoKQoreworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRlKCkK
K3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUpCit7Cit9
CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKK30KKyNlbmRpZgorICAg
IAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1J1bkxvb3BUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNSdW5Mb29wVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2VjYjljYmM0M2I4MGQzMWVmOGI2YjA0OWMx
N2VmNWFjNGZjYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSdW5Mb29wVGltZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29y
ZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEdMSUIpCisj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBKU0xvY2s7CitjbGFzcyBWTTsKKworY2xhc3MgSlNSdW5Mb29wVGltZXIgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNSdW5Mb29wVGltZXI+IHsKK3B1YmxpYzoKKyAgICBK
U1J1bkxvb3BUaW1lcihWTSopOworI2lmIFVTRShDRikKKyAgICBzdGF0aWMgdm9pZCB0aW1lckRp
ZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKTsKKyNlbmRpZgorCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB+SlNSdW5Mb29wVGltZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9X
b3JrKCkgPSAwOworCisgICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vj
b25kcyk7CisgICAgdm9pZCBjYW5jZWxUaW1lcigpOworICAgIGJvb2wgaXNTY2hlZHVsZWQoKSBj
b25zdCB7IHJldHVybiBtX2lzU2NoZWR1bGVkOyB9CisKKyNpZiBVU0UoQ0YpCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7CisjZW5kaWYgLy8gVVNF
KENGKQorCitwcm90ZWN0ZWQ6CisgICAgVk0qIG1fdm07CisKKyAgICBSZWZQdHI8SlNMb2NrPiBt
X2FwaUxvY2s7CisgICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsKKyNpZiBVU0UoQ0Yp
CisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOworCisgICAgUmV0YWlu
UHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BS
ZWY+IG1fcnVuTG9vcDsKKworICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisK
KyAgICBMb2NrIG1fc2h1dGRvd25NdXRleDsKKyNlbGlmIFVTRShHTElCKQorICAgIHN0YXRpYyBj
b25zdCBsb25nIHNfZGVjYWRlOworICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7CisgICAgR1JlZlB0
cjxHU291cmNlPiBtX3RpbWVyOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkMzc0MjFmMDQzYTAzNmQ3ZTBiODZmZjQzZDZmODZmNzYzM2Q5YjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvbWlzZURl
ZmVycmVkVGltZXIuaCIKKworI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVk
ZSAiVk0uaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworUHJvbWlzZURlZmVycmVkVGlt
ZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKFZNJiB2bSkKKyAgICA6IEJhc2UoJnZtKQoreworfQor
Cit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpkb1dvcmsoKQoreworICAgIEFTU0VSVChtX3Zt
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3Rhc2tMb2NrKTsKKyAgICBjYW5jZWxUaW1lcigpOworICAgIHdoaWxlICghbV90YXNrcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHRpY2tldDsKKyAgICAgICAg
VGFzayB0YXNrOworICAgICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2spID0gbV90YXNrcy50YWtl
TGFzdCgpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRG9pbmcgd29yayBvbiBwcm9t
aXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgICAgIC8vIFdlIG1heSBoYXZlIGFs
cmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMuCisgICAgICAgIGlmIChtX3BlbmRpbmdQcm9t
aXNlcy5jb250YWlucyh0aWNrZXQpKSB7CisgICAgICAgICAgICB0YXNrKCk7CisgICAgICAgICAg
ICBtX3ZtLT5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2Fp
dGluZ1Rhc2tzID0gbV9ibG9ja2VkVGFza3MudGFrZSh0aWNrZXQpOworICAgICAgICBmb3IgKGNv
bnN0IFRhc2smIHVuYmxvY2tlZFRhc2sgOiB3YWl0aW5nVGFza3MpIHsKKyAgICAgICAgICAgIHVu
YmxvY2tlZFRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWljcm90YXNrcygpOworICAg
ICAgICB9CisgICAgfQorCisjaWYgVVNFKENGKQorICAgIGlmIChtX3BlbmRpbmdQcm9taXNlcy5p
c0VtcHR5KCkgJiYgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9taXNlc0ZpbmlzaCkKKyAg
ICAgICAgQ0ZSdW5Mb29wU3RvcChtX3J1bkxvb3AuZ2V0KCkpOworI2VuZGlmCit9CisKKyNpZiBV
U0UoQ0YpCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKCkKK3sKKyAgICBB
U1NFUlQoIW1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VS
VChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgpKTsKKyAgICBtX3Nob3Vs
ZFN0b3BSdW5Mb29wV2hlbkFsbFByb21pc2VzRmluaXNoID0gdHJ1ZTsKKyAgICBDRlJ1bkxvb3BS
dW4oKTsKK30KKyNlbmRpZgorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5n
UHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
JiYgZGVwZW5kYW5jaWVzKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwZW5kYW5jaWVz
LnNpemUoKTsgKytpKQorICAgICAgICBBU1NFUlQoZGVwZW5kYW5jaWVzW2ldLmdldCgpICE9IHRp
Y2tldCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZCh0aWNrZXQs
IFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4oKSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJBZGRpbmcgbmV3IHBlbmRpbmcgcHJvbWlz
ZTogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKKyAgICAgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChT
dHJvbmc8SlNDZWxsPigqbV92bSwgdGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBXVEZNb3ZlKGRlcGVuZGFuY2llcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgZGVwZW5kYW5jaWVzIGZvciBwcm9taXNlOiAi
LCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZFZlY3RvcihkZXBlbmRhbmNpZXMpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB0
aWNrZXQtPnByb21pc2VBc3luY1BlbmRpbmcoKTsKKyNlbmRpZgorfQorCitib29sIFByb21pc2VE
ZWZlcnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlj
a2V0KQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
KTsKKyAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZSh0aWNrZXQpOwor
CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkNhbmNlbGlu
ZyBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgYXV0byBibG9ja2VkVGFz
a3MgPSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7CisgICAgZm9yIChjb25zdCBUYXNrJiB0
YXNrIDogYmxvY2tlZFRhc2tzKQorICAgICAgICB0YXNrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVXb3JrU29vbihKU1Byb21p
c2VEZWZlcnJlZCogdGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3Rhc2tMb2NrKTsKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUodGlja2V0
LCBXVEZNb3ZlKHRhc2spKSk7CisgICAgaWYgKCFpc1NjaGVkdWxlZCgpKQorICAgICAgICBzY2hl
ZHVsZVRpbWVyKDApOworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZUJs
b2NrZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiBibG9ja2luZ1RpY2tldCwgVGFzayYmIHRhc2sp
Cit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV9ibG9ja2VkVGFza3MuYWRkKGJsb2NraW5nVGlja2V0LCBWZWN0
b3I8VGFzaz4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZSh0
YXNrKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI4NzRi
ZjdhMGZkMjBlYjJhNzlkNzNjNzI4YzExYjAwMGExYmZkZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKyNpbmNsdWRlICJT
dHJvbmcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
UHJvbWlzZURlZmVycmVkOworY2xhc3MgVk07CitjbGFzcyBKU0NlbGw7CisKK2NsYXNzIFByb21p
c2VEZWZlcnJlZFRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CisKKyAgICBQcm9taXNlRGVmZXJyZWRUaW1lcihW
TSYpOworCisgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkUGVuZGlu
Z1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVw
ZW5kYW5jaWVzKTsKKyAgICAvLyBKU1Byb21pc2VEZWZlcnJlZCBzaG91bGQgaGFuZGxlIGNhbmNl
bGluZyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAgIGJvb2wg
Y2FuY2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqKTsKKworICAgIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IFRhc2s7CisgICAgdm9pZCBzY2hlZHVsZVdvcmtTb29uKEpT
UHJvbWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAgIC8vIEJsb2NrZWQgdGFza3Mgc2hvdWxk
IG9ubHkgYmUgcmVnaXN0ZXJlZCB3aGlsZSBob2xkaW5nIHRoZSBKUyBBUEkgbG9jay4gSWYgd2Ug
ZGlkbid0IHJlcXVpcmUgaG9sZGluZyB0aGUKKyAgICAvLyBKUyBBUEkgbG9jayB0aGVuIHRoZXJl
IG1pZ2h0IGJlIGEgcmFjZSB3aGVyZSB0aGUgcHJvbWlzZSB5b3UgYXJlIHdhaXRpbmcgb24gaXMg
cnVuIGJlZm9yZSB5b3VyIHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVkLgorICAgIHZvaWQgc2No
ZWR1bGVCbG9ja2VkVGFzayhKU1Byb21pc2VEZWZlcnJlZCosIFRhc2smJik7CisKKyNpZiBVU0Uo
Q0YpCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5SdW5Mb29wKCk7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFN0cm9uZzxK
U0NlbGw+Pj4gbV9wZW5kaW5nUHJvbWlzZXM7CisgICAgTG9jayBtX3Rhc2tMb2NrOworI2lmIFVT
RShDRikKKyAgICBib29sIG1fc2hvdWxkU3RvcFJ1bkxvb3BXaGVuQWxsUHJvbWlzZXNGaW5pc2gg
eyBmYWxzZSB9OworI2VuZGlmCisgICAgVmVjdG9yPHN0ZDo6dHVwbGU8SlNQcm9taXNlRGVmZXJy
ZWQqLCBUYXNrPj4gbV90YXNrczsKKyAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwgVmVj
dG9yPFRhc2s+PiBtX2Jsb2NrZWRUYXNrczsKK307CisKKworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAwNjRkYjIwNjI2MzljZmYyNjk5
ZGVmMzE0MDJmYTc3NWI3ZmZhNzQwLi5lZmM0Zjc4Y2MyMzNlNWQ2MzZjYjc4NTRmY2YxNzBjNDdi
YTMyNGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC04NSw2ICs4NSw3
IEBACiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgog
I2luY2x1ZGUgIlByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRU
aW1lci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiUmVn
RXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKQEAgLTEwMyw2ICsxMDQsNyBA
QAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3Bl
LmgiCiAjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNp
bmNsdWRlICJXZWFrTWFwRGF0YS5oIgpAQCAtMTc4LDYgKzE4MCw3IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIHRvcFZNRW50cnlGcmFtZShudWxscHRy
KQogICAgICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9DYWxsZXIoKSkKICAgICAsIHRvcEpT
V2ViQXNzZW1ibHlJbnN0YW5jZShudWxscHRyKQorICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIo
c3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9h
dG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEoKS5hdG9t
aWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0cmluZ1RhYmxlKQogICAgICwgcHJvcGVydHlO
YW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKaW5kZXggMTQ0MDg2ZDk3NDAxOTcwYmFlNjFjMjFkZjM3ZTdjMWZlN2Jm
NTZmZS4uOTYzYWE5YTg3YmY2OGZkYjA3MDI5MWNmMzNiMmUxYjU3NWRiZDI3MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDcgQEAgY2xhc3MgSlNPYmplY3Q7
CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOworY2xhc3MgUHJvbWlzZURlZmVycmVkVGltZXI7
CiBjbGFzcyBSZWdFeHBDYWNoZTsKIGNsYXNzIFJlZ2lzdGVyOwogY2xhc3MgUmVnaXN0ZXJBdE9m
ZnNldExpc3Q7CkBAIC0zNzksNiArMzgwLDcgQEAgcHVibGljOgogICAgIHN0ZDo6b25jZV9mbGFn
IG1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZsYWc7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uPiBtX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbjsK
ICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlRGVmZXJyZWRUaW1lcj4gcHJvbWlz
ZURlZmVycmVkVGltZXI7CiAgICAgCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVjdGluZ0Nh
bGxiYWNrT2JqZWN0OwogICAgIGNvbnN0IENsYXNzSW5mbyogY3VycmVudGx5RGVzdHJ1Y3RpbmdD
YWxsYmFja09iamVjdENsYXNzSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseS5jcHAKaW5kZXggZmNkYzhjZGRjNGRhNjhkZDlkY2UxOTkwZDlkOTkxMmVkZDI5
ZDY2OC4uNDA3ZDllY2Y0Y2JiYzkyYTc2MjQzMDc4MDc3MTk3ZDk4NTg5NjJjMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKQEAgLTMzLDEwICszMywx
NiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJl
ZC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2lu
Y2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGlt
ZXIuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgog
I2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIKIAordXNpbmcgSlNDOjpX
YXNtOjpQbGFuOworCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFM
TFlfREVTVFJVQ1RJQkxFKEpTV2ViQXNzZW1ibHkpOwpAQCAtNDUsNDUgKzUxLDE3NiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0
ZSopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5j
KEV4ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUlu
c3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlamVj
dChFeGVjU3RhdGUqIGV4ZWMsIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUsIEpTUHJvbWlzZURlZmVy
cmVkKiBwcm9taXNlKQoreworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5l
eGNlcHRpb24oKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKyAgICBjYXRjaFNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUo
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworfQor
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBjYXRj
aFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgdHJ1bHkgYXN5bmNocm9ub3VzOgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTYKLSAgICBK
U1ZhbHVlIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVs
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRp
b24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGNhdGNoU2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFs
dWUoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgp
KTsKLSAgICB9CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VC
dWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBk
ZXBlbmRhbmNpZXM7CisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwg
Z2xvYmFsT2JqZWN0KSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQ
cm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kYW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4g
cGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwg
W3NvdXJjZSwgcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAg
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5w
cm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBw
cm9taXNlLCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxl
ID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0
LT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIHBsYW4uY29w
eVJlZigpKTsKKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAg
ICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogCi0gICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUp
OworICAgICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICB9
KTsKKyAgICB9KSk7CisKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocHJvbWlz
ZSwgcGxhbi5jb3B5UmVmKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+
cHJvbWlzZSgpKTsKIH0KIAorZW51bSBjbGFzcyBSZXNvbHZlIHsgV2l0aEluc3RhbmNlLCBXaXRo
TW9kdWxlQW5kSW5zdGFuY2UgfTsKK3N0YXRpYyB2b2lkIHJlc29sdmUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIFJlc29sdmUgZW50cmll
cywgUGxhbiogcGxhbikKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisgICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIHBsYW4pOworICAg
IGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHBy
b21pc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVudHJpZXMgPT0gUmVz
b2x2ZTo6V2l0aEluc3RhbmNlKQorICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGluc3Rh
bmNlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFT
Q0lJTGl0ZXJhbCgiaW5zdGFuY2UiKSksIGluc3RhbmNlKTsKKyAgICAgICAgcHJvbWlzZS0+cmVz
b2x2ZShleGVjLCByZXN1bHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5zdGFudGlhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFJlc29sdmUg
ZW50cmllcykKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Cisg
ICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUu
IFdlIGZpcnN0IGFsbG9jYXRlIGl0cyBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9y
bWF0aW9uIHByaW9yIHRvCisgICAgLy8gZ2VuZXJhdGluZyBhbnkgY29kZS4gSWYgd2UgZGlkbid0
IGRvIHRoaXMgd2UgbWlnaHQgY2hvb3NlIHRvIGNvbXBpbGUgd2l0aCBTaWduYWxpbmcgbWVtb3J5
IGJ1dCBhY3R1YWxseSBnZXQgYSBCb251ZHMgQ2hlY2tpbmcKKyAgICAvLyBtZW1vcnkgdGhlbiBo
YXZlIHRvIHJlY29tcGlsZS4KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0g
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1
Y3R1cmUoKSk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJlamVjdChl
eGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBU
aGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXM6CisgICAgLy8gMSkgVGhlIGluc3RhbmNlIGFs
cmVhZHkgaGFzIGFuIGluaXRpYWxpemVkIENvZGVCbG9jaywgc28gd2UgaGF2ZSBubyBtb3JlIHdv
cmsgdG8gZG8uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNvIHdl
IG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8vIDMp
IFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywgc28g
c29tZW9uZSBlbHNlIGlzIGNvbXBpbGluZyBjb2RlIGFuZCB3ZSBqdXN0IG5lZWQgdG8gd2FpdCBm
b3IgdGhlbS4KKworICAgIGlmIChpbnN0YW5jZS0+cnVubmFibGUoKSkgeworICAgICAgICByZXNv
bHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzLCBudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4g
ZGVwZW5kYW5jaWVzOworICAgIC8vIFRoZSBpbnN0YW5jZSBrZWVwcyB0aGUgbW9kdWxlIGFsaXZl
LgorICAgIGRlcGVuZGFuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGluc3RhbmNlKSk7
CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2Us
IFdURk1vdmUoZGVwZW5kYW5jaWVzKSk7CisKKyAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygp
KSB7CisgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZUJsb2NrZWRUYXNr
KGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cHJvbWlzZSgpLCBbJnZtLCBwcm9taXNlLCBpbnN0YW5j
ZSwgbW9kdWxlLCBlbnRyaWVzXSAoKSB7CisgICAgICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3Qg
PSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIGlmICghaW5zdGFuY2Ut
PnJ1bm5hYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBiZWNh
dXNlIHdlIHJhbiBvdXQgb2YgbWVtb3J5LgorICAgICAgICAgICAgICAgIHByb21pc2UtPnJlamVj
dChleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBt
b2R1bGUsIGVudHJpZXMsIG51bGxwdHIpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGluc3RhbmNlLT5hZGRVbml0aWFsaXplZENvZGVCbG9jayh2bSwgcHJvbWlz
ZSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyByZXBhcnNlcyB0aGUgbW9kdWxlIGhlYWRlciwgd2hp
Y2ggc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4KKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVm
KCpuZXcgUGxhbih2bSwgbW9kdWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFtwcm9t
aXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzXSAoUGxhbiYgcCkgeworICAgICAgICBSZWZQ
dHI8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURl
ZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGluc3RhbmNl
LCBtb2R1bGUsIGVudHJpZXMsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSB7CisgICAgICAgICAg
ICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gaW5zdGFuY2Ut
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBpZiAoIWluc3RhbmNl
LT5ydW5uYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gU29tZW9uZSBjb3VsZCBkbyBhIHN5
bmNocm9ub3VzIGluc3RhbnRpYXRpb24gYW5kIHN0ZWFsIHRoZSBjb21waWxhdGlvbi4KKyAgICAg
ICAgICAgICAgICBpbnN0YW5jZS0+Y29kZUJsb2NrKCktPmluaXRpYWxpemUoKnBsYW4pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHBy
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXMsIHBsYW4uZ2V0KCkpOworICAgICAgICB9
KTsKKyAgICB9KSk7CisKKyAgICBwbGFuLT5zZXRNb2RlKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkp
OworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwcm9taXNlLCBwbGFuLmNvcHlS
ZWYoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVy
LCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNv
dXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCApOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRhbmNp
ZXM7CisgICAgZGVwZW5kYW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2Jq
ZWN0KSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHBy
b21pc2UsIFdURk1vdmUoZGVwZW5kYW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgUGxhbih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3NvdXJjZSwg
cHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsK
KyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52
bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtzb3Vy
Y2UsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShw
bGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHViKHZtLCBleGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0
dXJlKCksIFdURk1vdmUoc291cmNlKSwgcGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgaWYg
KHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3Bl
LCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9i
amVjdCwgUmVzb2x2ZTo6V2l0aE1vZHVsZUFuZEluc3RhbmNlKTsKKyAgICAgICAgfSk7CisgICAg
fSkpOworCisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHByb21pc2UsIHBsYW4u
Y29weVJlZigpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAot
ICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgQVBJIHRydWx5IGFzeW5jaHJvbm91czogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NwotCiAgICAgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIGF1dG8gcmVqZWN0ID0gWyZdICgpIHsKLSAgICAg
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOwotICAgICAg
ICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwotICAgIH07
Ci0KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAg
SlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAg
IGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KSB7CkBA
IC05MywyOSArMjMwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIAogICAgIEpTVmFsdWUg
Zmlyc3RBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIEpTVmFsdWUgbW9kdWxlOwot
ICAgIGJvb2wgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gZmFsc2U7Ci0gICAgaWYgKGZpcnN0QXJn
dW1lbnQuaW5oZXJpdHModm0sIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmluZm8oKSkpIHsKLSAgICAg
ICAgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gdHJ1ZTsKLSAgICAgICAgbW9kdWxlID0gZmlyc3RB
cmd1bWVudDsKLSAgICB9IGVsc2UgewotICAgICAgICBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZmlyc3RBcmd1bWVudCwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICAg
ICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0
KCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IFdlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoZXhlYywganNDYXN0PEpT
V2ViQXNzZW1ibHlNb2R1bGUqPihtb2R1bGUpLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAo
Y2F0Y2hTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHJlamVjdCgpOwotCi0gICAg
aWYgKGZpcnN0QXJndW1lbnRJc01vZHVsZSkKLSAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVj
LCBpbnN0YW5jZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoIm1vZHVsZSIpKSwgbW9kdWxl
KTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5jZSk7Ci0gICAgICAgIHByb21p
c2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKGF1dG8qIG1vZHVsZSA9
IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBmaXJzdEFyZ3VtZW50KSkK
KyAgICAgICAgaW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0LCBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpOworICAgIGVsc2UKKyAgICAgICAgY29tcGlsZUFu
ZEluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBmaXJzdEFyZ3VtZW50LCBpbXBvcnRPYmpl
Y3QpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwog
fQpAQCAtMTI5LDcgKzI0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIHNpemVfdCBieXRlU2l6ZTsK
ICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIGJh
c2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgV2FzbTo6UGxhbiBwbGFuKHZtLCBiYXNl
ICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5h
bGl6ZSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2Vw
dGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAppbmRleCA0NWQwY2Q5NzU1YWE0ZWYyNTU3Y2IyYWJjZDU5YmI0YTgwNDZhNjkzLi5m
MjVkNmEyMGJlZTBiOWJlMGM0YTc5MTFmZWVhMTMyNTkzNTQzOWNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBAIC0yOSw2
ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q2FsbGVlLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJV
bmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1
ZGUgPHd0Zi9CYWcuaD4KQEAgLTM5LDE0ICs0MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogCituYW1l
c3BhY2UgV2FzbSB7CitjbGFzcyBQbGFuOworfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJh
ZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1
YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVl
Q291bnQpCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2UsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAgIHsKLSAg
ICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3Nl
bWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIHN0ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJ
bmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2FyZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxlZUNvdW50KTsKKyAgICAgICAgYXV0byogcmVz
dWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4o
dm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayh2bSwgb3duZXIsIG1vZGUsIHByb21pc2UsIGNhbGxlZUNvdW50KTsKICAgICAgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtNTYsMTAgKzYxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKKyAgICAvLyBEb24ndCBjYWxsIHRoaXMgZGly
ZWN0bHksIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmb3IgeW91LCBhcyBuZWVkZWQsIGJ5IEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbi4KKyAgICB2b2lkIGluaXRpYWxpemUo
V2FzbTo6UGxhbiYpOworCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KICAgICBXYXNtOjpNZW1vcnk6Ok1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgYm9vbCBp
c1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisgICAgYm9vbCBpc1NhZmVUb1J1bihK
U1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZSgpIGNvbnN0IHsgQVNTRVJUKCFpbml0aWFsaXplZCgpKTsgcmV0dXJuIG1fcHJvbWlzZTsgfQog
CiAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewpAQCAtODksMTAg
Kzk5LDcgQEAgcHVibGljOgogICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxl
ZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVy
PEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKLSAgICB9CisgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFy
Kj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7IH0KIAogICAgIHZvaWQqIHdhc21Ub0pzQ2Fs
bFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewpAQCAtMTAxLDcgKzEw
OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25lZCBj
YWxsZWVDb3VudCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1i
bHlNb2R1bGUqLCBXYXNtOjpNZW1vcnk6Ok1vZGUsIEpTUHJvbWlzZURlZmVycmVkKiwgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKQEAgLTEyNSw3ICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlv
bmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1f
d2FzbUV4aXRTdHViczsKKyAgICBib29sIG1faW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwogICAgIFdh
c206Ok1lbW9yeTo6TW9kZSBtX21vZGU7CisgICAgLy8gVGhlIHByb21pc2UgdGhhdCB3YXMgaW5p
dGlhbGx5IHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbiB0aGlzIGNvZGUgYmxvY2suCisgICAgSlNQ
cm9taXNlRGVmZXJyZWQqIG1fcHJvbWlzZTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCmluZGV4IDBhMmU1Y2NjOGM0YjI1OWIyMjc5YjQwMDBhYTJiNGJhM2M1NTI2YzMuLmVkYTEw
ZmQ1ZTE1MjBlODQzNzRhMzVkYTAzNmExOTA2YTcyMGE0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE1NSw3ICsxNTUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAg
ICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mKTsKKyAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbios
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeTo6TW9kZSk7CiAKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0
dXJlKik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwpAQCAtMjE5LDYgKzIxOSw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92
bTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1lbW9yeTo6TW9k
ZSBtX21vZGU7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2s7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0yMjksOSArMjMw
LDEwIEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZTsKIH07CiAKLUIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxh
dGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscykKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgTWVtb3J5OjpNb2RlIG1vZGUpCiAgICAgOiBtX3ZtKHZtKQogICAg
ICwgbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fcHJvYyhwcm9jZWR1
cmUpCiAgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzKQogewpAQCAtNDU4LDcgKzQ2MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiBpbmxp
bmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0
aW9uKQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwotICAgIGlmIChtX2luZm8ubWVt
b3J5Lm1vZGUoKSA9PSBNZW1vcnk6Ok1vZGU6OkJvdW5kc0NoZWNraW5nKSB7CisgICAgaWYgKG1f
bW9kZSA9PSBNZW1vcnk6Ok1vZGU6OkJvdW5kc0NoZWNraW5nKSB7CiAgICAgICAgIEFTU0VSVCht
X21lbW9yeVNpemVHUFIpOwogICAgICAgICBBU1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0
ID4gb2Zmc2V0KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRz
Q2hlY2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBz
aXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKQEAgLTQ5NCw3ICs0OTYsNyBAQCBpbmxpbmUg
dWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCiAKIGlubGluZSBCMzo6S2luZCBC
M0lSR2VuZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiB7Ci0gICAgaWYg
KG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgIGlmIChtX21v
ZGUgPT0gTWVtb3J5OjpTaWduYWxpbmcpCiAgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlP
cCk7CiAgICAgcmV0dXJuIG1lbW9yeU9wOwogfQpAQCAtMTIwMCw3ICsxMjAyLDcgQEAgc3RhdGlj
IHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQKICAgICBqaXQucmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZN
JiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
KiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8
U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJl
SW5kaWNlcywgdW5zaWduZWQgb3B0TGV2ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBp
bGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUlu
ZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1l
bW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9
IHN0ZDo6bWFrZV91bmlxdWU8V2FzbUludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTEyMDgsNyAr
MTIxMCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwKICAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oJnZtKTsK
IAogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Ci0gICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KHZt
LCBpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMp
OworICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQu
Z2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlKTsKICAgICBGdW5jdGlvblBhcnNl
cjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoJnZtLCBjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvLCBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9Vbmlx
dWVkU2lnbmF0dXJlSW5kaWNlcyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZXIucGFyc2UoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCmluZGV4IDI0OWQ1NzgxNGE5MjhjNGJmOTIwNmJjODUyNTY0YzM2Yzc4ODlhNGUu
Ljk3ZTRlNDc1OTJhYTJhYzQyNzY2YzdmMDgzYzUwOThlZGQxMDdmYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KIAogZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwpAQCAtNDcs
NyArNDgsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGw7CiB9OwogCi1FeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNv
bnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiYsIE1lbW9yeTo6TW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCmluZGV4IDlhN2E2NzI5YTcxZmJkZjA1MTc0YTFjY2MxMWE1NmY2MjcxZGNl
YmMuLjU1Njk0MzVmNDEyZTY2YTZkNzQ4YzMzNThiYmQxNTM1MWNlNTIyOTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHN0YXRp
YyBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhFeHRlcm5hbEtpbmQga2luZCkKIH0KIAog
c3RydWN0IEltcG9ydCB7Ci0gICAgSWRlbnRpZmllciBtb2R1bGU7Ci0gICAgSWRlbnRpZmllciBm
aWVsZDsKKyAgICBTdHJpbmcgbW9kdWxlOworICAgIFN0cmluZyBmaWVsZDsKICAgICBFeHRlcm5h
bEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0
b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07CiAKIHN0cnVjdCBFeHBvcnQgewotICAg
IElkZW50aWZpZXIgZmllbGQ7CisgICAgU3RyaW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBr
aW5kOwogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0
aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKQEAgLTI2MCw2ICsyNjAsNyBAQCBzdHJ1Y3QgTW9k
dWxlSW5mb3JtYXRpb24gewogICAgIH0KIAogICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291
bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgp
OyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4g
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CiAKICAgICB+TW9kdWxl
SW5mb3JtYXRpb24oKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCAyNGYxODE1NmUyOWY3ZjNkMmRhMTYwYTkz
NGU3YmNiNWEwYjJiOGRhLi5kMjY1NGFiNDI4MTQwYzAyZjJhMTUzNTAyYTA0NWVlYmMyN2Q1MThk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRS
ZWdpc3RlckluZm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsK
IH0KIAotTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9k
ZT4gcmVjb21waWxlTW9kZSwgYm9vbCBpc0ltcG9ydCkKK01lbW9yeUluZm9ybWF0aW9uOjpNZW1v
cnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wg
aXNJbXBvcnQpCiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhp
bXVtKQogICAgICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKQEAgLTgyLDE5ICs4Miw2IEBAIE1lbW9y
eUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11CiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CiAg
ICAgQVNTRVJUKCEhKnRoaXMpOwotCi0gICAgaWYgKCFyZWNvbXBpbGVNb2RlKSB7Ci0gICAgICAg
IGlmICghaXNJbXBvcnQpIHsKLSAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6
OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpTaWduYWxpbmcpOwotICAgICAg
ICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1vcnkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISEq
bV9yZXNlcnZlZE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1l
bW9yeS0+bW9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBtX21vZGUgPSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fbW9kZSA9ICpyZWNvbXBpbGVNb2RlOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA1YTlhNzdhODdjZGY1YzE1ZGFmMjcxODZhYWNl
NTMxZmZkYWQyNmRmLi5kMTgyYzczY2Q2NTM4OGNhZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaApAQCAtNTQsMjIgKzU0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7
CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiwgYm9vbCBpc0lt
cG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsKIAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29u
c3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7
IHJldHVybiBtX21heGltdW07IH0KLSAgICBib29sIGhhc1Jlc2VydmVkTWVtb3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsgfQotICAgIFJlZlB0cjxNZW1vcnk+IHRha2VSZXNl
cnZlZE1lbW9yeSgpIHsgQVNTRVJUKGhhc1Jlc2VydmVkTWVtb3J5KCkpOyByZXR1cm4gbV9yZXNl
cnZlZE1lbW9yeS5yZWxlYXNlKCk7IH0KLSAgICBNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lz
SW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8TWVtb3J5PiBtX3Jlc2VydmVk
TWVtb3J5OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWwgeyB9OwogICAgIFBhZ2VDb3VudCBtX21h
eGltdW0geyB9OwotICAgIE1lbW9yeTo6TW9kZSBtX21vZGUgeyBNZW1vcnk6Ok1vZGU6OkJvdW5k
c0NoZWNraW5nIH07CiAgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKaW5kZXggMjFk
MWQwYzdkMWVhYWIyZTcyY2IzN2U3OTEyNDU4ZDVmZDNlNGMzZC4uZTczNmJiZjJmMTczMmFlMjg0
ODQ0ZjM0ZTI5OTg4MzNjYjg2ODUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTE2MiwxMSArMTYyLDExIEBAIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIGxlbmd0aCIpOwogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVs
ZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5h
bWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbik7Ci0gICAgICAgIGltcC5tb2R1bGUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKG1fdm0sIG1vZHVsZVN0cmluZyk7CisgICAgICAgIGltcC5tb2R1bGUg
PSBtb2R1bGVTdHJpbmc7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywg
ZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxk
IG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbiwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmlu
ZywgIiciKTsKLSAgICAgICAgaW1wLmZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3Zt
LCBmaWVsZFN0cmluZyk7CisgICAgICAgIGltcC5maWVsZCA9IGZpZWxkU3RyaW5nOwogCiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGltcC5raW5kKSwgImNh
bid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVsZSAnIiwg
bW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIHN3
aXRjaCAoaW1wLmtpbmQpIHsKQEAgLTMxNiw3ICszMTYsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogICAgIEFT
U0VSVChpbml0aWFsUGFnZUNvdW50KTsKICAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwg
bWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKIAotICAgIG1fcmVzdWx0Lm1v
ZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oKm1fdm0sIGluaXRpYWxQYWdlQ291bnQs
IG1heGltdW1QYWdlQ291bnQsIG1fbW9kZSwgaXNJbXBvcnQpOworICAgIG1fcmVzdWx0Lm1vZHVs
ZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBh
Z2VDb3VudCwgaXNJbXBvcnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTM3Niw3ICszNzYs
NyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5n
LCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmll
bGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRMZW4pOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGV4cG9ydE5hbWVzLmNvbnRhaW5zKGZpZWxkU3RyaW5nKSwgImR1cGxpY2F0ZSBleHBvcnQ6
ICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkU3Ry
aW5nKTsKLSAgICAgICAgZXhwLmZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBm
aWVsZFN0cmluZyk7CisgICAgICAgIGV4cC5maWVsZCA9IGZpZWxkU3RyaW5nOwogCiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGV4cC5raW5kKSwgImNhbid0
IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGV4cC5raW5kSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdz
IGtpbmQgaW5kZXgsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCA5NGJhMTRlMTVhM2ZkYTMx
MDRlMzNiYWMwOTNjMWYxZTgxY2YyMGM2Li43YjMyYTkwOGM4OTIxNGRhZmY3YTAzMjM2MDc2N2Mz
OTZhZTMzMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5oCkBAIC00NCw5ICs0NCw4IEBAIHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQgewogY2xh
c3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1
YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1
ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IG1v
ZGUpCisgICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlQnVmZmVy
LCBzaXplX3Qgc291cmNlTGVuZ3RoKQogICAgICAgICA6IFBhcnNlcih2bSwgc291cmNlQnVmZmVy
LCBzb3VyY2VMZW5ndGgpCi0gICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KIApA
QCAtNjYsNyArNjUsNiBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJU
eXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKLSAgICBzdGQ6Om9wdGlv
bmFsPE1lbW9yeTo6TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAgYm9vbCBtX2hh
c1RhYmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAppbmRleCAxYThkM2RjZWU2MmQ1ODYwOTUxZTg2ZTBhNTUwZjgwMjk1NDBhZTIzLi5kMzc2
NzM5M2U4MjRiYTAxNzM0ZGRmMWJjZGQyNDgzNzNjZWY4MzBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90b25p
Y1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUwLDMwICs0OSw2NSBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwotICAgIAotUGxhbjo6UGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpCi0g
ICAgOiBQbGFuKHZtLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKQorCitQbGFuOjpQbGFu
KFZNJiB2bSwgQXJyYXlCdWZmZXImIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25U
YXNrJiYgdGFzaykKKyAgICA6IFBsYW4odm0sIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNv
dXJjZS5kYXRhKCkpLCBzb3VyY2UuYnl0ZUxlbmd0aCgpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQor
eworfQorCitQbGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKHZtLCBzb3VyY2Uu
ZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQogewogfQogCi1QbGFu
OjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3Ro
KQorUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJj
ZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1f
dm0odm0pCisgICAgLCBtX2NvbXBsZXRpb25UYXNrKHRhc2spCiAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VMZW5ndGgpCisgICAgLCBtX2FzeW5jV29y
ayh3b3JrKQogewogfQogCi1ib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpv
cHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCitjb25zdCBjaGFyKiBQbGFuOjpz
dGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2Fz
ZSBTdGF0ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFsIjsKKyAgICBjYXNlIFN0YXRlOjpWYWxp
ZGF0ZWQ6IHJldHVybiAiVmFsaWRhdGVkIjsKKyAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDogcmV0
dXJuICJQcmVwYXJlZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGlsZWQ6IHJldHVybiAiQ29tcGls
ZWQiOworICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDogcmV0dXJuICJDb21wbGV0ZWQiOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBsYW46Om1v
dmVUb1N0YXRlKFN0YXRlIHN0YXRlKQogeworICAgIEFTU0VSVChzdGF0ZSA+IG1fc3RhdGUpOwor
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJtb3ZpbmcgdG8gc3RhdGU6ICIsIHN0YXRlU3RyaW5n
KHN0YXRlKSwgIiBmcm9tIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhtX3N0YXRlKSk7CisgICAgbV9z
dGF0ZSA9IHN0YXRlOworfQorCit2b2lkIFBsYW46OmZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKQoreworICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJmYWlsaW5nIHdpdGggbWVzc2FnZTogIiwgZXJyb3JNZXNzYWdlKTsKKyAgICBtX2Vycm9y
TWVzc2FnZSA9IFdURk1vdmUoZXJyb3JNZXNzYWdlKTsKKyAgICBjb21wbGV0ZShsb2NrZXIpOwor
fQorCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQoreworICAgIEFTU0VSVCht
X3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3Rh
cnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAgIGlm
ICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAgICBzdGFy
dFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAgICAgICAgTW9kdWxlUGFy
c2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIHJlY29tcGls
ZU1vZGUpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKCZtX3ZtLCBtX3NvdXJj
ZSwgbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFy
c2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgIGZhaWwoTm9M
b2NraW5nTmVjZXNzYXJ5LCBXVEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBtX21vZHVsZUluZm9ybWF0aW9u
ID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlKTsKQEAgLTgyLDUyICsxMTYsNDggQEAgYm9v
bCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2Rl
PiByZWNvbXBpbGVNb2RlKQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgZnVuY3Rpb25JbmRl
eCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7
ICsrZnVuY3Rpb25JbmRleCkgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kKTsKKyAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIs
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBl
bmRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVu
ZCk7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIG1f
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBz
aXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlv
bkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAg
ICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCk7
CiAKLSAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihtX3Zt
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZv
cm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
cyk7CisgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oJm1f
dm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVsZUlu
Zm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRp
Y2VzKTsKICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5j
dGlvbkxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1
bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklY
TUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgZmFpbChOb0xvY2tpbmdOZWNl
c3NhcnksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGlt
ZXMoKSkKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1lOjpub3coKSAt
IHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9kdWxlIik7Cisg
ICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNvbXBsZXRlKE5vTG9j
a2luZ05lY2Vzc2FyeSk7CisgICAgZWxzZQorICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6VmFs
aWRhdGVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gV2UgYXJlIGNyZWF0aW5nIGEgYnVu
Y2ggb2YgdGhyZWFkcyB0aGF0IHRvdWNoIHRoZSBtYWluIHRocmVhZCdzIHN0YWNrLiBUaGlzIHdp
bGwgbWFrZSBBU0FOIHVuaGFwcHkuCi0vLyBUaGUgcmVhc29uIHRoaXMgaXMgT0sgaXMgdGhhdCB3
ZSBndWFyYW50ZWUgdGhhdCB0aGUgbWFpbiB0aHJlYWQgZG9lc24ndCBjb250aW51ZSB1bnRpbCBh
bGwgdGhyZWFkcwotLy8gdGhhdCBjb3VsZCB0b3VjaCBpdHMgc3RhY2sgYXJlIGRvbmUgZXhlY3V0
aW5nLgotU1VQUFJFU1NfQVNBTiAKLXZvaWQgUGxhbjo6cnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5
OjpNb2RlPiByZWNvbXBpbGVNb2RlKQordm9pZCBQbGFuOjpwcmVwYXJlKCkKIHsKLSAgICBpZiAo
IXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6VmFsaWRhdGVkKTsKKyAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiU3RhcnRpbmcgcHJlcGFyYXRpb24iKTsKIAogICAgIFRyYWNlU2NvcGUgdHJh
Y2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2ViQXNzZW1ibHlDb21waWxlRW5kKTsK
IAotICAgIGlmIChyZWNvbXBpbGVNb2RlKQotICAgICAgICBBU1NFUlQobV9tb2R1bGVJbmZvcm1h
dGlvbi0+bWVtb3J5Lm1vZGUoKSA9PSByZWNvbXBpbGVNb2RlKTsKLQogICAgIGF1dG8gdHJ5UmVz
ZXJ2ZUNhcGFjaXR5ID0gW3RoaXNdIChhdXRvJiB2ZWN0b3IsIHNpemVfdCBzaXplLCBjb25zdCBj
aGFyKiB3aGF0KSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdmVjdG9yLnRyeVJlc2VydmVDYXBh
Y2l0eShzaXplKSkpIHsKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFsbG9jYXRpbmcgZW5vdWdoIHNw
YWNlIGZvciAiKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHNpemUpOwogICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQod2hhdCk7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGZhaWwoTm9Mb2NraW5nTmVjZXNz
YXJ5LCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDEyOSArMTc4LDEzOSBAQCB2b2lk
IFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSkKICAg
ICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uSW5kZXggPSBt
X3dhc21FeGl0U3R1YnMuc2l6ZSgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2dMbigiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVyICIsIGltcG9ydEZ1
bmN0aW9uSW5kZXgsICI6ICIsIGltcG9ydC0+bW9kdWxlLCAiOiAiLCBpbXBvcnQtPmZpZWxkKTsK
KyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9u
IG51bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjog
IiwgaW1wb3J0LT5maWVsZCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLmF0
KGltcG9ydC0+a2luZEluZGV4KTsKLSAgICAgICAgbV93YXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFw
cGVuZChleGl0U3R1YkdlbmVyYXRvcihtX3ZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUlu
ZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CisgICAgICAgIG1fd2FzbUV4aXRTdHVicy51bmNo
ZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IoJm1fdm0sIG1fY2FsbExpbmtJbmZvcywgc2ln
bmF0dXJlSW5kZXgsIGltcG9ydEZ1bmN0aW9uSW5kZXgpKTsKICAgICB9CiAKLSAgICBtX2N1cnJl
bnRJbmRleCA9IDA7CisgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlByZXBhcmVkKTsKK30KIAotICAg
IGF1dG8gZG9Xb3JrID0gW3RoaXNdIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkluZGV4ID0g
bV9jdXJyZW50SW5kZXg7Ci0gICAgICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKLSAgICAg
ICAgICAgIH0KKy8vIFdlIGRvbid0IGhhdmUgYSBzZW1hcGhvcmUgY2xhc3MuLi4gYW5kIHRoaXMg
ZG9lcyBraW5kYSBpbnRlcmVzdGluZyB0aGluZ3MuCitjbGFzcyBQbGFuOjpUaHJlYWRDb3VudEhv
bGRlciB7CitwdWJsaWM6CisgICAgVGhyZWFkQ291bnRIb2xkZXIoUGxhbiYgcGxhbikKKyAgICAg
ICAgOiBtX3BsYW4ocGxhbikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxh
bi5tX2xvY2spOworICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKKyAg
ICB9CiAKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJj
ZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAg
ICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rp
b25JbmRleF0uc3RhcnQ7Ci0gICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9z
b3VyY2VMZW5ndGgpOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgg
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tm
dW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgp
ICsgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAg
ICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlv
bkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOwotCi0gICAgICAgICAgICBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+KCk7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9t
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyk7Ci0KLSAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIW1fZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGNv
bXBpbGVzIGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNob29zZSB0
aGUgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmlu
ZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXgg
IiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4g
RXhwZWN0ZWQuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY3VycmVudElu
ZGV4ID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgIH5UaHJlYWRDb3Vu
dEhvbGRlcigpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2Nr
KTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CiAKLSAgICAgICAg
ICAgICAgICAvLyBXZSB3aWxsIHRlcm1pbmF0ZSBvbiB0aGUgbmV4dCBleGVjdXRpb24uCi0gICAg
ICAgICAgICAgICAgY29udGludWU7IAotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIW1fcGxh
bi5tX251bWJlck9mQWN0aXZlVGhyZWFkcykKKyAgICAgICAgICAgIG1fcGxhbi5jb21wbGV0ZShs
b2NrZXIpOworICAgIH0KIAotICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVu
Y3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotICAgICAgICB9
Ci0gICAgfTsKKyAgICBQbGFuJiBtX3BsYW47Cit9OwogCi0gICAgTW9ub3RvbmljVGltZSBzdGFy
dFRpbWU7Ci0gICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkp
Ci0gICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwordm9pZCBQbGFuOjpj
b21waWxlRnVuY3Rpb25zKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFy
ZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlvbiIpOwog
Ci0gICAgdWludDMyX3QgdGhyZWFkQ291bnQgPSBPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkg
PyBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA6IDE7Ci0gICAgdWludDMyX3QgbnVtV29y
a2VyVGhyZWFkcyA9IHRocmVhZENvdW50IC0gMTsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmll
cj4gdGhyZWFkczsKLSAgICB0aHJlYWRzLnJlc2VydmVDYXBhY2l0eShudW1Xb3JrZXJUaHJlYWRz
KTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtV29ya2VyVGhyZWFkczsgaSsrKQot
ICAgICAgICB0aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVUaHJlYWQoImpzYy53YXNtLWIz
LWNvbXBpbGF0aW9uLnRocmVhZCIsIGRvV29yaykpOworICAgIGlmIChtX3N0YXRlID49IFN0YXRl
OjpDb21waWxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25J
bmRleDsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBm
dW5jdGlvbkluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgICAgICArK21fY3VycmVudElu
ZGV4OworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKSkKKyAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29t
cGlsZWQpOworICAgICAgICB9CiAKLSAgICBkb1dvcmsoKTsgLy8gTGV0IHRoZSBtYWluIHRocmVh
ZCBkbyBzb21lIHdvcmsgdG9vLgorICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlb
ZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBt
X3NvdXJjZUxlbmd0aCk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleF07CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVuY3Rp
b25JbmRleDsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHZhbGlk
YXRlRnVuY3Rpb24oJm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1
ZWRTaWduYXR1cmVJbmRpY2VzKSk7CisKKyAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOworICAg
ICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX3ZtLCBt
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0
aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25J
bmRleF0sICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1Vu
aXF1ZWRTaWduYXR1cmVJbmRpY2VzLCBtX21vZGUpOworCisgICAgICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZXR0aW5n
IHRoZSBsb2NrOiBmYWlsIik7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisgICAgICAgICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlKSB7CisgICAgICAgICAgICAg
ICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJi
aXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KKyAgICAgICAgICAgICAgICBmYWlsKGxvY2tlciwg
bWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24g
YXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFr
ZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Xb3Jr
ZXJUaHJlYWRzOyBpKyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNb
aV0pOworICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdU
Rk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7CisgICAgfQorfQogCi0gICAgZm9yICh1aW50
MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24g
PSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJp
bmcoKTsKK3ZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKQoreworICAg
IEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOworICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q29tcGlsZWQpIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVu
Y3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25J
bmRleCsrKSB7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCptX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7Ci0gICAg
ICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21F
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRl
eHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CisgICAg
ICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
bV92bSwgKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAgICAgICAg
ICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24gPQogICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVl
PEIzOjpDb21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5
IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFz
Y2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0LmpzRW50
cnlwb2ludEpJVCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNv
bnRleHQuanNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxh
dGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29udGV4dC5q
c0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25Q
dHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogCi0gICAgICAgICAg
ICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50
cnlwb2ludC5jb21waWxhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24g
PQogICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4o
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5
cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWko
KS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAKLSAgICBp
ZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkgewotICAgICAgICBk
YXRhTG9nTG4oIlRvb2sgIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNy
b3NlY29uZHMoKSwKLSAgICAgICAgICAgICIgdXMgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgbW9k
dWxlIik7Ci0gICAgfQorICAgICAgICB9CiAKLSAgICAvLyBQYXRjaCB0aGUgY2FsbCBzaXRlcyBm
b3IgZWFjaCBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBmb3IgKGF1dG8mIHVubGlua2VkIDog
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxscykgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1
bmxpbmtlZCkgewotICAgICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7Ci0gICAgICAg
ICAgICBpZiAobV9tb2R1bGVJbmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUUgaW1wb3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdl
bmVyYXRpbmcgYSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQg
YnkgYSBSRUxFQVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjQ2MgotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJn
ZXQgPT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCisgICAgICAgIGZvciAo
YXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxpbmtlZCkgeworICAgICAgICAgICAgICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzOworICAgICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9u
LT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wb3J0cyBjb3VsZCBoYXZl
IGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LiBU
aGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IGNhbGwudGFyZ2V0ID09IFVubGlua2VkV2FzbVRv
V2FzbUNhbGw6OlRhcmdldDo6VG9KcwogICAgICAgICAgICAgICAgICAgICA/IG1fd2FzbUV4aXRT
dHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXgpLndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpCiAgICAgICAgICAgICAgICAgICAgIDogbV93YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVu
Y3Rpb25JbmRleCkud2FzbVRvV2FzbS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7Ci0gICAgICAgICAgICAgICAgZXhl
Y3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9u
SW5kZXggLSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpKS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRp
b24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldCAhPSBVbmxpbmtlZFdhc21U
b1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMpOworICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxl
QWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleCAt
IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IG1fZmFpbGVkID0gZmFsc2U7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkg
eworICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAgbV9jb21w
bGV0aW9uVGFzaygqdGhpcyk7CisgICAgICAgIG1fY29tcGxldGVkLm5vdGlmeUFsbCgpOworICAg
IH0KIH0KIAotdm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+IGNhbGxiYWNrKQordm9pZCBQbGFuOjp3YWl0Rm9y
Q29tcGxldGlvbigpCiB7Ci0gICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7Ci0g
ICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBv
aW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+
anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENhbGxlZSk7Ci0KLSAgICAg
ICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT53
YXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
ZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsK
LQotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENh
bGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgIH0KKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOworICAgIG1fY29tcGxldGVkLndhaXQobV9sb2NrKTsKIH0KIAogUGxhbjo6flBs
YW4oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IGQwNzAzNzUy
MDMyYzlhYTBjZDg1ODQxN2ZiMTcyNmU3ZmI5YzNkZjkuLmIyNzI4NTJlMDA4ZWMzMTk2YjFjOGFi
ZjYzZWJjNWI4ZWQ3ZTA4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MywyNCArNDMsMjQgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKIAogbmFtZXNwYWNlIFdh
c20gewogCi1jbGFzcyBQbGFuIHsKK2NsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8UGxhbj4gewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBW
ZWN0b3I8dWludDhfdD4pOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCBkb250RmluYWxpemUoUGxhbiYpIHsg
fQorICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKFBsYW4mKT4gQ29tcGxldGlvblRhc2s7
CisgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24g
fTsKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVu
Y2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUu
CisgICAgUGxhbihWTSYsIEFycmF5QnVmZmVyJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYm
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZN
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7Cisg
ICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAgIHZvaWQgY29tcGlsZUZ1
bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVl
cyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwotCi0gICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKLSAgICB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBvcnRzKCkgY29uc3QK
ICAgICB7CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgaW50ZXJuYWxGdW5j
dGlvbkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSk7Ci0gICAgICAgIHJldHVybiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7CisgICAg
ICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAgICAgfQogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJbmZvcm1h
dGlvbigpCkBAIC05Miw5ICs5MiwzNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEZNb3Zl
KG1fd2FzbUV4aXRTdHVicyk7CiAgICAgfQogCi0gICAgTWVtb3J5OjpNb2RlIG1vZGUoKSBjb25z
dCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAgTWVt
b3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICB2b2lkIHNldE1v
ZGUoTWVtb3J5OjpNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQorICAgIFZNJiB2bSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm07IH0KKworICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsK
KyAgICAgICAgSW5pdGlhbCwKKyAgICAgICAgVmFsaWRhdGVkLAorICAgICAgICBQcmVwYXJlZCwK
KyAgICAgICAgQ29tcGlsZWQsCisgICAgICAgIENvbXBsZXRlZAorICAgIH07CisKKyAgICBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9
CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiAh
ZXJyb3JNZXNzYWdlKCkuaXNOdWxsKCk7IH0KKyAgICBib29sIGhhc1dvcmsoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlIDwgU3RhdGU6OkNvbXBpbGVkOyB9CisgICAgYm9vbCBoYXNCZWVuUHJlcGFy
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZDsgfQorCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yQ29tcGxldGlvbigpOwogCiBwcml2YXRlOgor
ICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRDb3Vu
dEhvbGRlcjsKKworICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKKwor
ICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOworICAgIHZvaWQgZmFpbChjb25zdCBBYnN0cmFj
dExvY2tlciYsIFN0cmluZyYmIGVycm9yTWVzc2FnZSk7CisKKyAgICBjb25zdCBjaGFyKiBzdGF0
ZVN0cmluZyhTdGF0ZSk7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+
IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eT4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4
PiBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzOwpAQCAt
MTAzLDE2ICsxMzEsMjMgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdh
c21JbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9y
PENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogCi0gICAgVk0qIG1f
dm07CisgICAgVk0mIG1fdm07CisgICAgQ29tcGxldGlvblRhc2sgbV9jb21wbGV0aW9uVGFzazsK
KwogICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHM7CiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29uc3Qg
c2l6ZV90IG1fc291cmNlTGVuZ3RoOwotICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CiAgICAg
U3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotICAgIHVpbnQzMl90IG1fY3VycmVudEluZGV4OworICAg
IE1lbW9yeTo6TW9kZSBtX21vZGUgeyBNZW1vcnk6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9j
ayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1fc3RhdGUg
eyBTdGF0ZTo6SW5pdGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAg
ICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1f
Y3VycmVudEluZGV4IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFkYzYzMmVh
OTIzNTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2lu
Y2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAg
IGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlv
bkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rp
b25JbmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1i
bHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9p
bnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5q
c1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1i
bHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21D
YWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBjYWxs
YmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5
cG9pbnRDYWxsZWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1MzFkMDliZjUwOGNiN2UxNGM3NWJjNGI5
NTQzYzk2NjNmMTdmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXYXNtV29ya2xpc3QuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
Ildhc21QbGFuLmgiCisKKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CisKK2NvbnN0IGNoYXIqIFdvcmtsaXN0Ojpwcmlvcml0eVN0cmluZyhQcmlvcml0eSBw
cmlvcml0eSkKK3sKKyAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CisgICAgY2FzZSBQcmlvcml0eTo6
UHJlcGFyYXRpb246IHJldHVybiAiUHJlcGFyYXRpb24iOworICAgIGNhc2UgUHJpb3JpdHk6OlNo
dXRkb3duOiByZXR1cm4gIlNodXRkb3duIjsKKyAgICBjYXNlIFByaW9yaXR5OjpDb21waWxhdGlv
bjogcmV0dXJuICJDb21waWxhdGlvbiI7CisgICAgY2FzZSBQcmlvcml0eTo6U3luY2hyb25vdXM6
IHJldHVybiAiU3luY2hyb25vdXMiOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitjbGFzcyBXb3JrbGlzdDo6VGhyZWFkIGZpbmFsIDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBBdXRvbWF0aWNUaHJlYWQgQmFzZTsK
KyAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmsp
CisgICAgICAgIDogQmFzZShsb2NrZXIsIHdvcmsubV9sb2NrLCB3b3JrLm1fcGxhbkVucXVldWVk
KQorICAgICAgICAsIHdvcmtsaXN0KHdvcmspCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgYXR0ZW1wdFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFuKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikKKyAgICB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gd29ya2xpc3QubV9xdWV1ZTsKKwor
ICAgICAgICBpZiAocXVldWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAocXVldWUudG9wKCkucGxhbiA9PSBlbGVtZW50LnBsYW4pCisgICAgICAgICAgICBxdWV1
ZS5wb3AoKTsKKyAgICB9CisKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gd29ya2xp
c3QubV9xdWV1ZTsKKworICAgICAgICB3aGlsZSAoIXF1ZXVlLmVtcHR5KCkpIHsKKworICAgICAg
ICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS50b3AoKS5wcmlvcml0eTsKKyAgICAgICAg
ICAgIGlmIChwcmlvcml0eSA9PSBXb3JrbGlzdDo6UHJpb3JpdHk6OlNodXRkb3duKQorICAgICAg
ICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOworCisgICAgICAgICAgICBlbGVtZW50
ID0gcXVldWUudG9wKCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLnRvcCgpLm11bHRpVGhyZWFk
ZWQoKSkKKyAgICAgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKworICAgICAgICAgICAgaWYgKGVs
ZW1lbnQucGxhbi0+aGFzV29yaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0
OjpXb3JrOworCisgICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgYW5vdGhlciB0aHJlYWQg
bGlua2luZyB0aGlzIHBsYW4gc28gd2UgY2FuIGRlcXVlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90
aGVyIHBsYW5zLgorICAgICAgICAgICAgYXR0ZW1wdFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFuKGxv
Y2tlcik7CisgICAgICAgICAgICBlbGVtZW50ID0gUXVldWVFbGVtZW50KCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7CisgICAgfQorCisgICAgV29ya1Jlc3Vs
dCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gY29tcGxldGUgPSBbJl0gKCkg
eworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOworICAgICAgICAgICAgcmV0
dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICB9OworCisgICAgICAgIFBsYW4qIHBs
YW4gPSBlbGVtZW50LnBsYW4uZ2V0KCk7CisgICAgICAgIEFTU0VSVChwbGFuKTsKKyAgICAgICAg
aWYgKCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgeworICAgICAgICAgICAgcGxhbi0+cGFyc2VB
bmRWYWxpZGF0ZU1vZHVsZSgpOworICAgICAgICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHBsYW4tPnByZXBhcmUoKTsKKworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndv
cmtsaXN0Lm1fbG9jayk7CisgICAgICAgICAgICBlbGVtZW50Lm5leHRQcmlvcml0eSgpOworICAg
ICAgICAgICAgd29ya2xpc3QubV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworICAgICAgICAgICAgd29y
a2xpc3QubV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGNoZWNrIGluIGF0IHNvbWUgb2NjYXNpb25hbGx5
IHRvIHNlZSBpZiB0aGVyZSBhcmUgbmV3LCBoaWdoZXIgcHJpb3JpdHksIHBsYW5zIHRoYXQgbmVl
ZCB0byBiZSBydW4uCisgICAgICAgIHBsYW4tPmNvbXBpbGVGdW5jdGlvbnMoKTsKKyAgICAgICAg
QVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAgICAgICBhdHRlbXB0VG9SZW1vdmVDb21waWxh
dGlvblBsYW4oaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOworICAgICAgICByZXR1cm4gY29t
cGxldGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV29ya2xpc3QmIHdvcmtsaXN0OworICAg
IFF1ZXVlRWxlbWVudCBlbGVtZW50OworfTsKKworYm9vbCBXb3JrbGlzdDo6UXVldWVFbGVtZW50
OjptdWx0aVRocmVhZGVkKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CisgICAg
Y2FzZSBQcmlvcml0eTo6U2h1dGRvd246CisgICAgY2FzZSBQcmlvcml0eTo6Q29tcGlsYXRpb246
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBXb3JrbGlzdDo6UXVldWVFbGVtZW50OjpuZXh0UHJpb3JpdHkoKQor
eworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlv
bjoKKyAgICAgICAgcHJpb3JpdHkgPSBQcmlvcml0eTo6Q29tcGlsYXRpb247CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByaW9yaXR5OjpTeW5jaHJvbm91czoKKyAgICAgICAgcmV0dXJuOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFdvcmtsaXN0OjplbnF1ZXVlKEpTUHJvbWlzZURlZmVy
cmVkKiBwcm9taXNlLCBSZWZQdHI8UGxhbj4gcGxhbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBwcm9taXNlIGl0IG11c3Qg
YmUgc3luY2hyb25vdXMgc28gd2Ugc2hvdWxkIGJvb3N0IHRoZSBwcmlvcml0eS4KKyAgICBQcmlv
cml0eSBwcmlvcml0eSA9IHByb21pc2UgPyBQcmlvcml0eTo6UHJlcGFyYXRpb24gOiBQcmlvcml0
eTo6U3luY2hyb25vdXM7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkVucXVldWluZyBwbGFu
IHdpdGggcHJpb3JpdHk6ICIsIHByaW9yaXR5U3RyaW5nKHByaW9yaXR5KSk7CisgICAgbV9xdWV1
ZS5wdXNoKHsgcHJpb3JpdHksIG5leHRUaWNrZXQoKSwgcHJvbWlzZSwgV1RGTW92ZShwbGFuKSB9
KTsKKyAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7Cit9CisKK1JlZlB0cjxQ
bGFuPiBXb3JrbGlzdDo6Y29tcGxldGVQbGFuRm9yUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZSkKK3sKKyAgICBBU1NFUlQocHJvbWlzZSk7CisgICAgUmVmUHRyPFBsYW4+IHBsYW47
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKworICAgICAgICAv
LyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4gaXRlcmF0b3IuLi4gOiggV2hp
bGUgdGhpcyBpcyBncm9zcywgdGhpcyBmdW5jdGlvbgorICAgICAgICAvLyBzaG91bGRuJ3QgYmUg
Y2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwuCisgICAgICAg
IC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9yaXR5UXVldWUgdGhhdCBkb2Vz
bid0IHN1Y2suCisgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFF1ZXVlRWxlbWVudD4gZWxlbWVu
dHM7CisgICAgICAgIHdoaWxlICghbV9xdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAo
bV9xdWV1ZS50b3AoKS5wcm9taXNlID09IHByb21pc2UpIHsKKyAgICAgICAgICAgICAgICBRdWV1
ZUVsZW1lbnQgdGFyZ2V0ID0gbV9xdWV1ZS50b3AoKTsKKyAgICAgICAgICAgICAgICBtX3F1ZXVl
LnBvcCgpOworCisgICAgICAgICAgICAgICAgcGxhbiA9IHRhcmdldC5wbGFuOworICAgICAgICAg
ICAgICAgIHRhcmdldC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICAgICAg
ICAgICAgICBtX3F1ZXVlLnB1c2godGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsZW1lbnRzLnB1c2hfYmFjayhtX3F1ZXVlLnRvcCgp
KTsKKyAgICAgICAgICAgIG1fcXVldWUucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGF1dG8gZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1l
bnQpOworICAgIH0KKworICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgcmV0dXJu
IHBsYW47Cit9CisKK1dvcmtsaXN0OjpXb3JrbGlzdCgpCisgICAgOiBtX2xvY2soQm94PExvY2s+
OjpjcmVhdGUoKSkKKyAgICAsIG1fcGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bjo6Y3JlYXRlKCkpCit7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMg
PSBPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgPyBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29y
ZXMoKSAtIDEgOiAxOyAvLyBTYXZlIGEgY29yZSBmb3IgdGhlIG1haW4gdGhyZWFkLgorICAgIG1f
dGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMpOworICAg
IExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkczsgaSsrKQorICAgICAgICBtX3RocmVhZHMudW5j
aGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8V29ya2xpc3Q6OlRocmVhZD4obG9ja2VyLCAq
dGhpcykpOworfQorCitXb3JrbGlzdDo6fldvcmtsaXN0KCkKK3sKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0
eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciB9KTsKKyAgICAgICAg
bV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIH0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICBtX3RocmVhZHNb
aV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdDsKKworV29y
a2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKSB7IHJldHVybiBnbG9iYWxXb3JrbGlzdDsg
fQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVXb3Jr
bGlzdCwgW10geworICAgICAgICBnbG9iYWxXb3JrbGlzdCA9IG5ldyBXb3JrbGlzdCgpOworICAg
IH0pOworICAgIHJldHVybiAqZ2xvYmFsV29ya2xpc3Q7Cit9CisKKworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmFmODQ3MTZkZDVl
ZjFiMGI5ZjQyYzQ1NjIyM2U0NGMxZmNhNjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDxx
dWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOworCitjbGFzcyBXb3JrbGlzdCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV29ya2xpc3QoKTsKKyAg
ICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5xdWV1ZShKU1By
b21pc2VEZWZlcnJlZCosIFJlZlB0cjxQbGFuPik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JW
TShWTSYpOworCisgICAgUmVmUHRyPFBsYW4+IGNvbXBsZXRlUGxhbkZvclByb21pc2UoSlNQcm9t
aXNlRGVmZXJyZWQqKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5k
IGNsYXNzIFRocmVhZDsKKworICAgIHR5cGVkZWYgdW5zaWduZWQgVGlja2V0OworICAgIFRpY2tl
dCBuZXh0VGlja2V0KCkgeyByZXR1cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBC
b3g8TG9jaz4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1f
cGxhbkVucXVldWVkOworCisgICAgZW51bSBjbGFzcyBQcmlvcml0eSB7CisgICAgICAgIFNodXRk
b3duLAorICAgICAgICBTeW5jaHJvbm91cywKKyAgICAgICAgQ29tcGlsYXRpb24sCisgICAgICAg
IFByZXBhcmF0aW9uCisgICAgfTsKKyAgICBjb25zdCBjaGFyKiBwcmlvcml0eVN0cmluZyhQcmlv
cml0eSk7CisKKyAgICBzdHJ1Y3QgUXVldWVFbGVtZW50IHsKKyAgICAgICAgUHJpb3JpdHkgcHJp
b3JpdHk7CisgICAgICAgIFRpY2tldCB0aWNrZXQ7CisgICAgICAgIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlOworICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKworICAgICAgICBib29sIG11
bHRpVGhyZWFkZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBuZXh0UHJpb3JpdHkoKTsKKyAgICB9
OworCisgICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IFF1ZXVlRWxlbWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50JiByaWdo
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxlZnQucHJpb3JpdHkgPT0gcmlnaHQucHJp
b3JpdHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0
OworICAgICAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBXVEY6OlZlY3Rv
ciBidXQgV1RGOjpWZWN0b3IgZG9lcyBub3Qgc3VwcG9ydCByYW5kb20gYWNjZXNzIGl0ZXJhdG9y
LgorICAgIHN0ZDo6cHJpb3JpdHlfcXVldWU8UXVldWVFbGVtZW50LCBzdGQ6OnZlY3RvcjxRdWV1
ZUVsZW1lbnQ+LCBDb21wYXJhdG9yPiBtX3F1ZXVlOworICAgIC8vIFRlY2huaWNhbGx5LCB0aGlz
IGNvdWxkIG92ZXJmbG93IGJ1dCB0aGF0J3MgdW5saWtlbHkuIEV2ZW4gaWYgaXQgZGlkLCB3ZSB3
aWxsIGp1c3QgY29tcGlsZSB0aGluZ3Mgb2YgdGhlIHNhbWUKKyAgICAvLyBQcmlvcml0eSBpdCB0
aGUgd3Jvbmcgb3JkZXIsIHdoaWNoIGlzbid0IHdyb25nLCBqdXN0IHN1Ym9wdGltYWwuCisgICAg
VGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEF1dG9tYXRpY1RocmVhZD4+IG1fdGhyZWFkczsKK307CisKK1dvcmtsaXN0KiBleGlz
dGluZ1dvcmtsaXN0T3JOdWxsKCk7CitKU19FWFBPUlRfUFJJVkFURSBXb3JrbGlzdCYgZW5zdXJl
V29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDYWxsZWUuaAppbmRleCBiODc3N2RhMGQ0ZDdhMTMwZjQyMjRlZDQ1ZmNj
YzJkMTljMWYyN2M2Li5hOGEzZGNhM2QwOWY1ZGQzOWRhNmI5YThmOTk1ZGM4NTA4OTg3YWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2Fs
bGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNh
bGxlZS5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVyczsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBX
YXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlwb2lu
dCYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CiAK
ICAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCmlu
ZGV4IGIyMWY4YTVjYzY0NWYyZTI1Yjc3NDExN2JkYWY5OGFmNDcwZDM0YTEuLmZjMGQwOTU4YzA4
YWQxNjk4NTY2ZTk4MzAyYTk4MDA0ZjQxNDQyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0zMSwy
OSArMzEsNTUgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRl
ICJXYXNtUGxhbklubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5m
byBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNvZGVCbG9j
ayIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNvZGVCbG9j
aykgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNh
bGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1YnMs
IFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBvd25lciwgIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53
ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZv
cyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUo
d2FzbUV4aXRTdHVicykpCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fcHJvbWlzZShwcm9t
aXNlKQogICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5z
ZXQodm0sIHRoaXMsIG93bmVyKTsKKyAgICBvd25lci0+YWRkQ29kZUJsb2NrKHZtLCB0aGlzKTsK
ICAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKIH0KIAordm9pZCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjppbml0aWFsaXplKFdhc206OlBsYW4mIHBsYW4pCit7CisgICAgVk0mIHZtID0g
cGxhbi52bSgpOworCisgICAgQVNTRVJUKCFtX2luaXRpYWxpemVkKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghcGxhbi5oYXNXb3JrKCkgJiYgIXBsYW4uZmFpbGVkKCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKHBsYW4ubW9kZSgpID09IG1vZGUoKSk7CisgICAgQVNTRVJUKHBsYW4uaW50ZXJuYWxGdW5j
dGlvbkNvdW50KCkgPT0gbV9jYWxsZWVDb3VudCk7CisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOworCisgICAgbV9jYWxsTGlua0luZm9zID0gcGxhbi50YWtl
Q2FsbExpbmtJbmZvcygpOworICAgIG1fd2FzbUV4aXRTdHVicyA9IHBsYW4udGFrZVdhc21FeGl0
U3R1YnMoKTsKKworICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxs
ZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICBzZXRKU0VudHJ5
cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAg
ICBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50
Q2FsbGVlKTsKKyAgICB9KTsKKworICAgIG1fcHJvbWlzZSA9IG51bGxwdHI7CisgICAgbV9pbml0
aWFsaXplZCA9IHRydWU7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9j
ayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9j
aygpOwogfQogCi1ib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2Vi
QXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNT
YWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAgIGlmICgh
bV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKG1vZGUoKSA9
PSBXYXNtOjpNZW1vcnk6OlNpZ25hbGluZykKICAgICAgICAgcmV0dXJuIG1lbW9yeS0+bWVtb3J5
KCkubW9kZSgpID09IG1vZGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmluZGV4IGYwMzMx
MGVhNWUyMDYwNjU0MWQ1OGU3MjY0YjE4NWU0M2Q2OTMzZDQuLjU3OGE2OWY0OTgxNWE4MjUyM2Mx
MTI5NDhmYmQ4ZWEwOTAzNWYyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtNzMsNiArNzMsMjIgQEAgQUxXQVlT
X0lOTElORSB1aW50OF90KiBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgc2kKICAgICByZXR1cm4gYXJyYXlCdWZmZXJWaWV3ID8gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+dmVjdG9yKCkpIDogc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGFycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
UmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgc2l6ZV90IGJ5dGVPZmZzZXQ7CisgICAgc2l6
ZV90IGJ5dGVTaXplOworICAgIHVpbnQ4X3QqIGRhdGEgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVl
KGV4ZWMsIHZhbHVlLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OnRyeUNyZWF0ZShkYXRhICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIGlmIChidWZm
ZXIpCisgICAgICAgIHJldHVybiBidWZmZXI7CisKKyAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogQUxXQVlTX0lOTElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24o
Vk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0
aW9uLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCiB7
CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5RnVuY3Rpb246OmluZm8o
KSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDFjMTFiMGNhNjVjOTE3NDJmOGU0ODEzYzI0ZDk3NWY2
NWVlYmFhMTguLmY0NjY1Y2RlMzY2ZmQwNjI5ZWJiMTYyOTYwZWZlYmM0MWQ5MjAyNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcApAQCAtMzIsMzEgKzMyLDE2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1v
cnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGNyZWF0
ZSBzdHViIG1lbW9yaWVzIGV2ZW4gZm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBn
ZXQgYSBtZW1vcnkgc28gd2Ugd2FudCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgotICAgIGlm
IChtZW1vcnktPm1lbW9yeSgpKSB7Ci0gICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxv
Y2stPm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMsIG1lbW9yeSk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlz
LCBjb2RlQmxvY2spOwotICAgIH0KLSAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7
Ci19Ci0KLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9k
dWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQotewot
ICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxk
IHRyeSB0byB0aHJvdyBPT00gaGVyZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlv
blNpemUobW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBzdHJ1Y3R1cmUsIG1v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
c2l6ZSgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlT2JqZWN0KTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Citjb25zdCBDbGFzc0lu
Zm8gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5j
ZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKSB9OwogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiB7CkBAIC03NSwxMSArNjAsMTEgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwogCisgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBtb2R1bGUpOwogICAgIGNvbnN0IHNp
emVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFs
cy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1
aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIAotICAgIG1fY29kZUJsb2NrLnNl
dCh2bSwgdGhpcywgbW9kdWxlLT5jb2RlQmxvY2soKSk7CiAgICAgbV9tb2R1bGVOYW1lc3BhY2VP
YmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIHB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJleHBvcnRzIiksIG1vZHVsZU5hbWVz
cGFjZU9iamVjdCwgTm9uZSk7CiB9CkBAIC05NSwxNiArODAsMjc0IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAg
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxlKCkt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgqdGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb24oaSkpOworICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtpXSk7Cit9CisK
K3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjphZGRVbml0aWFsaXplZENvZGVCbG9jayhWTSYg
dm0sIEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQpCit7CisgICAgYXV0byogY29kZUJsb2NrID0g
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBtb2R1bGUoKSwgbWVtb3J5TW9kZSgp
LCB0aWNrZXQsIG1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmludGVybmFsRnVuY3Rpb25D
b3VudCgpKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAg
QVNTRVJUKCFjb2RlQmxvY2stPmluaXRpYWxpemVkKCkpOworfQorCit2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgV2Fz
bTo6UGxhbiogcGxhbikKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisgICAgLy8gQW5vdGhlciBpbnN0YW5jZSBtYXkgaGF2ZSBkb25lIGEgc3luY2hyb25vdXMg
Y29tcGlsZSBhbmQgc3RvbGVuIHRoZSBpbml0aWFsaXphdGlvbiBmcm9tIHVzLgorICAgIGlmIChw
bGFuICYmICFjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgY29kZUJsb2NrKCkt
PmluaXRpYWxpemUoKnBsYW4pOworICAgIEFTU0VSVChydW5uYWJsZSgpKTsKKworICAgIGF1dG8q
IG1vZHVsZVJlY29yZCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KG1fbW9kdWxl
TmFtZXNwYWNlT2JqZWN0LT5tb2R1bGVSZWNvcmQoKSk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5r
KGV4ZWMsIG1vZHVsZSgpLCB0aGlzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAp
OworCisgICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhl
Yyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0UmVzdWx0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCApOworfQorCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5j
ZVN0cnVjdHVyZSkKK3sKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CisKKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRp
b24gPSBqc01vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKKworICAgIGF1dG8gZXhjZXB0aW9u
ID0gWyZdIChKU09iamVjdCogZXJyb3IpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisg
ICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBl
KGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgorICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQor
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBp
bXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRz
IikpKTsKKworICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQ
cml2YXRlTmFtZShQcml2YXRlTmFtZTo6RGVzY3JpcHRpb24sICJXZWJBc3NlbWJseUluc3RhbmNl
IikpOworICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgbW9kdWxlSW5mb3JtYXRpb24p
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5n
ZXRNb2R1bGVOYW1lc3BhY2UoZXhlYyk7CisgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291
bGQgYmUgcHJldHR5IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgorICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUlu
c3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRG
dW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVj
dHVyZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKKyAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAvLyBMZXQg
ZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNh
bGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5k
IFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KKyAgICAvLyBMZXQgaW1w
b3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCisgICAg
dW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0gMDsKKyAgICB1bnNpZ25lZCBudW1JbXBvcnRH
bG9iYWxzID0gMDsKKworICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CisgICAgYm9v
bCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOworICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1v
ZHVsZS5pbXBvcnRzOgorICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24u
aW1wb3J0cykgeworICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9m
IHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCisgICAgICAgIEpT
VmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgaW1wb3J0Lm1vZHVsZSkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICAvLyAyLiBJZiBUeXBlKG8p
IGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIWltcG9ydE1v
ZHVsZVZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxl
VmFsdWUpKSk7CisKKyAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1p
bmcgR2V0KG8sIGkuaXRlbV9uYW1lKQorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGltcG9ydC5maWVs
ZCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwor
CisgICAgICAgIHN3aXRjaCAoaW1wb3J0LmtpbmQpIHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CisgICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rp
b24gaW1wb3J0OgorICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwg
dGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlz
RnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9u
IG11c3QgYmUgY2FsbGFibGUiKSkpOworCisgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBh
biBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0OgorICAgICAgICAgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uOworICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CisgICAgICAgICAgICBpZiAoaXNXZWJBc3Nl
bWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJG
dW5jdGlvbikpIHsKKyAgICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYg
ZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5Lkxp
bmtFcnJvci4KKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNp
Z25hdHVyZUluZGV4OworICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAg
ICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25h
dHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJ
bmRleCgpOworICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xv
c3VyZV1dLgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rp
b24tPmZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKGltcG9ydGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1
cmVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGZ1bmN0
aW9uJ3Mgc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1
bmN0aW9uJ3Mgc2lnbmF0dXJlIikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGlp
aS4gT3RoZXJ3aXNlOgorICAgICAgICAgICAgLy8gYS4gTGV0IGNsb3N1cmUgYmUgYSBuZXcgaG9z
dCBmdW5jdGlvbiBvZiB0aGUgZ2l2ZW4gc2lnbmF0dXJlIHdoaWNoIGNhbGxzIHYgYnkgY29lcmNp
bmcgV2ViQXNzZW1ibHkgYXJndW1lbnRzIHRvIEphdmFTY3JpcHQgYXJndW1lbnRzIHZpYSBUb0pT
VmFsdWUgYW5kIHJldHVybnMgdGhlIHJlc3VsdCwgaWYgYW55LCBieSBjb2VyY2luZyB2aWEgVG9X
ZWJBc3NlbWJseVZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZTogZG9uZSBhcyBwYXJ0IG9mIFBs
YW4gY29tcGlsYXRpb24uCisgICAgICAgICAgICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3MuCisg
ICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0byB0aGUgaW5zdGFuY2UgbGlz
dCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9u
KS4KKworICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEZ1bmN0aW9ucyA9PSBpbXBvcnQua2lu
ZEluZGV4KTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbnMoKVtudW1JbXBv
cnRGdW5jdGlvbnMrK10uc2V0KHZtLCBpbnN0YW5jZSwgZnVuY3Rpb24pOworICAgICAgICAgICAg
Ly8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUg
Z3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KKyAgICAgICAgICAgIC8vIDcuIE90
aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6CisgICAgICAgICAgICBoYXNUYWJsZUltcG9y
dCA9IHRydWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5h
bWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgLy8g
aS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3Nl
bWJseS5UYWJsZSIpKSk7CisKKyAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9
IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOworICAgICAgICAg
ICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7CisgICAgICAgICAgICBp
ZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBz
bWFsbCIpKSk7CisKKyAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBleHBl
Y3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0o
KSkgeworICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGlt
dW0gPSB0YWJsZS0+bWF4aW11bSgpOworICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11
bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5v
dCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIp
KSk7CisgICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4aW11
bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21h
eGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVz
LgorICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KKyAg
ICAgICAgICAgIGluc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpNZW1vcnk6IHsKKyAgICAgICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMg
c2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOworICAgICAgICAgICAg
aGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7
CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmpl
Y3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKCFtZW1v
cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFu
IGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7CisKKyAgICAgICAgICAgIFdhc206
OlBhZ2VDb3VudCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5p
dGlhbCgpOworICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbEluaXRpYWwgPSBtZW1v
cnktPm1lbW9yeSgpLmluaXRpYWwoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwg
ZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1w
b3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7CisKKyAgICAg
ICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5Lm1heGltdW0oKSkgeworICAgICAgICAgICAgICAgIFdhc206OlBhZ2VDb3Vu
dCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUg
cmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKKworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxN
YXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiTWVtb3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBl
eHBlY3RlZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBp
aS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCisgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2Lltb
TWVtb3J5XV0gdG8gaW1wb3J0cy4KKyAgICAgICAgICAgIEFTU0VSVCghaW5zdGFuY2UtPm1fbWVt
b3J5KTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBt
ZW1vcnkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKKyAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9i
YWwgaW1wb3J0OgorICAgICAgICAgICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGds
b2JhbCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2Jh
bDo6SW1tdXRhYmxlKTsKKyAgICAgICAgICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2Yg
aSBpcyBpNjQgb3IgVHlwZSh2KSBpcyBub3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5Lkxp
bmtFcnJvci4KKyAgICAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9y
dC5raW5kSW5kZXhdLnR5cGUgPT0gV2FzbTo6STY0KQorICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJpbXBvcnRlZCBnbG9iYWwgY2Fubm90IGJlIGFuIGk2NCIpKSk7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9y
dGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIikpKTsKKyAgICAgICAgICAgIC8vIGlpaS4gQXBw
ZW5kIFRvV2ViQXNzZW1ibHlWYWx1ZSh2KSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNTRVJU
KG51bUltcG9ydEdsb2JhbHMgPT0gaW1wb3J0LmtpbmRJbmRleCk7CisgICAgICAgICAgICBzd2l0
Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAg
ICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFs
dWUuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7
CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhl
ciBoYXZlIGEgTWVtb3J5IGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0
aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9y
eUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3
aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpN
ZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsK
KyAgICAgICAgICAgIGlmICghbWVtb3J5KQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisKKyAgICAgICAgICAgIGluc3RhbmNl
LT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLAorICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseU1lbW9yeVN0cnVjdHVyZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJ
bmZvcm1hdGlvbiAmJiBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0
KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGltcG9y
dCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaGFzVGFibGVJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEh
bW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hl
biBpdCdzIGEgVGFibGUgZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGFibGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksCisgICAgICAg
ICAgICAgICAgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKKyAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlU
YWJsZSB3ZSd2ZSBkZWZpbmVkLgorICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJl
IHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KKyAg
ICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICBB
U1NFUlQodGFibGUpOworICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0
YW5jZSwgdGFibGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghaW5zdGFuY2Ut
Pm1lbW9yeSgpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5
LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0
ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCisgICAgICAgIGlu
c3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpj
cmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlT
dHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOworICAgIH0KKyAg
ICAKKyAgICAvLyBHbG9iYWxzCisgICAgeworICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFs
cyA9PSBtb2R1bGVJbmZvcm1hdGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsKKyAgICAgICAgZm9y
IChzaXplX3QgZ2xvYmFsSW5kZXggPSBudW1JbXBvcnRHbG9iYWxzOyBnbG9iYWxJbmRleCA8IG1v
ZHVsZUluZm9ybWF0aW9uLmdsb2JhbHMuc2l6ZSgpOyArK2dsb2JhbEluZGV4KSB7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBnbG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2dsb2Jh
bEluZGV4XTsKKyAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlICE9
IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOworICAgICAgICAgICAgaWYgKGdsb2JhbC5pbml0aWFs
aXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0KSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIDwgbnVtSW1w
b3J0R2xvYmFscyk7CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJ
bmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnRO
dW1iZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsK
KyAgICBpbnN0YW5jZS0+bV9jb2RlQmxvY2suc2V0TWF5QmVOdWxsKHZtLCBpbnN0YW5jZSwganNN
b2R1bGUtPmNvZGVCbG9jayhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisKKyAgICByZXR1cm4g
aW5zdGFuY2U7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNf
aW5mbyA9IHsgIldlYkFzc2VtYmx5Lkluc3RhbmNlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5SW5zdGFuY2UpIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCmluZGV4IDM5M2QzNzMxNTg4YTg2OTA3N2E5YjNiOGI1OWVhYjNiNDcx
OWNjOTAuLjIzMzVlYzc4YjdjN2Q4Mjk1ZTk3MjUyNTEwYjg5NGZiNzdkNmNiMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCkBAIC0zOCw1MSArMzgsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiAKK25hbWVzcGFjZSBX
YXNtIHsKK2NsYXNzIFBsYW47Cit9CisKKwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDog
cHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLQotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNy
ZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09iamVjdCogaW1w
b3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZP
OwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+bW9k
dWxlKCk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAgYm9vbCBydW5uYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGNvZGVCbG9jaygpICYmIGNvZGVCbG9jaygpLT5pbml0aWFsaXplZCgpOyB9
CisgICAgdm9pZCBhZGRVbml0aWFsaXplZENvZGVCbG9jayhWTSYsIEpTUHJvbWlzZURlZmVycmVk
Kik7CisgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6UGxh
biopOwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsKLSAgICB9CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KIAotICAgIFdyaXRlQmFycmllcjxKU09iamVj
dD4qIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsKLSAgICAgICAgcmV0dXJuICZpbXBv
cnRGdW5jdGlvbnMoKVtpZHhdOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4q
IGltcG9ydEZ1bmN0aW9ucygpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbnMoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbXBvcnRGdW5jdGlv
bihWTSYgdm0sIEpTT2JqZWN0KiB2YWx1ZSwgdW5zaWduZWQgaWR4KQotICAgIHsKLSAgICAgICAg
aW1wb3J0RnVuY3Rpb24oaWR4KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQorICAgIEpT
T2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4
IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25zKClbaWR4XS5n
ZXQoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9t
ZW1vcnkuZ2V0KCk7IH0KLSAgICAvLyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29t
cGlsZS4KLSAgICB2b2lkIHNldE1lbW9yeShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqKTsKKyAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVl
KTsgfQogICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5
KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFRhYmxlKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOyB9
CiAKICAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxzLmdldCgpW2ldOyB9CiAgICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQpAQCAtOTAsMTEgKzczLDYg
QEAgcHVibGljOgogICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CiAgICAgdm9p
ZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtp
XSA9IGJpdHM7IH0KIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbih1
bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlv
bnMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikgKiBpZHg7Ci0gICAgfQotCiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5
SW5zdGFuY2UsIG1fdGFibGUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2Jh
bHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2ds
b2JhbHMpOyB9CkBAIC0xMTMsNiArOTEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRl
OgorICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOyB9CisKKyAgICBXcml0ZUJhcnJp
ZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAgICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCA1NmYyMGI0
MzUwNjlmM2ZiNWYwYjY5MTIyYzM3Mjk4MWEwYzVmNTM5Li5kZjI0M2NhYzAxODdmMDY1MjE1ZjRi
ZjU4NjA3NmRhZjhmZTMyYjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtNDIsMzUgKzQyLDI1IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1vZHVsZTo6c19pbmZv
ID0geyAiV2ViQXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TW9kdWxlKSB9OwogCi1KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9jayhWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgV2FzbTo6UGxhbiYgcGxhbiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnk6
Ok1vZGU+IG1vZGUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikK
IHsKKyAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciBpcyB0aHJvd24uCi0gICAgcGxhbi5ydW4obW9kZSk7Ci0gICAgaWYgKHBs
YW4uZmFpbGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkp
KTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUo
KSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIGlmIChtb2RlKQotICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkpOwot
Ci0gICAgdW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgp
OwotICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2
bSwgdGhpcywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0dWJz
KCksIHBsYW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7Ci0KLSAgICBwbGFuLmluaXRpYWxpemVDYWxs
ZWVzKGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAg
ICBjb2RlQmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50
cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBvaW50
Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICB9
KTsKLSAgICByZXR1cm4gY29kZUJsb2NrOworCisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUt
PmZpbmlzaENyZWF0aW9uKHZtLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwog
fQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50OF90KiBzb3Vy
Y2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6YWRkQ29kZUJs
b2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1v
ZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7Ci0KLSAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwot
ICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBhdXRvIG1vZGUgPSBjb2RlQmxvY2stPm1vZGUoKTsK
KyAgICBBU1NFUlQoIXRoaXMtPmNvZGVCbG9jayhtb2RlKSk7CisgICAgbV9jb2RlQmxvY2tzW21v
ZGVdLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogU3RydWN0dXJlKiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTc4LDYxICs2OCw0MCBAQCBTdHJ1Y3R1cmUq
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3Nl
bWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZm
ZXI+JiYgc291cmNlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zb3VyY2VC
dWZmZXIoc291cmNlLnJlbGVhc2VOb25OdWxsKCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQotewotICAgIFdhc206Ok1lbW9yeTo6
TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgV2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1vZGVzOyArK2kpIHsKLSAgICAgICAg
aWYgKG1fY29kZUJsb2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3NbaV0tPmlzU2FmZVRvUnVuKG1lbW9y
eSkpCi0gICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tzW2ldLmdldCgpOwotICAgIH0KLQot
ICAgIEFTU0VSVCghbV9jb2RlQmxvY2tzW21vZGVdKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9y
IHRoaXMgbW9kZSwgd2UgbmVlZCB0byByZWNvbXBpbGUuLi4KLSAgICBXYXNtOjpQbGFuIHBsYW4o
JnZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291
cmNlQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotCi0gICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRD
b2RlQmxvY2sodm0sIGV4ZWMsIHBsYW4sIG1vZGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwotCi0gICAgQVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBt
X2V4cG9ydFN5bWJvbFRhYmxlLT5zaXplKCkpOwotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpCi0gICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGV4cCwgbV9leHBvcnRTeW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxk
LmltcGwoKSkpOwotICAgIH0KLQotICAgIEFTU0VSVChtb2RlID09IGNvZGVCbG9jay0+bW9kZSgp
KTsKLSAgICBtX2NvZGVCbG9ja3NbbW9kZV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAg
IHJldHVybiBjb2RlQmxvY2s7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90
IGJ5dGVTaXplKQordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFJlZlB0cjxXYXNtOjpQbGFuPiYmIHBsYW4pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwg
c291cmNlLCBieXRlU2l6ZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1bGVJbmZvcm1hdGlvbigp
OworICAgIGZvciAoYXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHMpIHsKKyAg
ICAgICAgQVNTRVJUKGV4cC5maWVsZC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7Cisg
ICAgICAgIGV4cC5maWVsZCA9IEF0b21pY1N0cmluZyhleHAuZmllbGQpOworICAgIH0KKyAgICBm
b3IgKGF1dG8mIGltcCA6IG1vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzKSB7CisgICAgICAgIEFT
U0VSVChpbXAuZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBp
bXAuZmllbGQgPSBBdG9taWNTdHJpbmcoaW1wLmZpZWxkKTsKKyAgICAgICAgQVNTRVJUKGltcC5t
b2R1bGUuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBpbXAubW9kdWxl
ID0gQXRvbWljU3RyaW5nKGltcC5tb2R1bGUpOworICAgIH0KIAotICAgIGF1dG8qIGNvZGVCbG9j
ayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBwbGFuKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCk7CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUobW9kdWxlSW5m
b3JtYXRpb24pOwogCiAgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
IG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQg
QXN0Lm1vZHVsZS4KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xU
YWJsZTo6Y3JlYXRlKHZtKTsKLSAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7
CisgICAgZm9yIChhdXRvJiBleHAgOiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7CiAg
ICAgICAgIGF1dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZz
ZXQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChO
b0xvY2tpbmdOZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFy
T2Zmc2V0KG9mZnNldCkpKTsKKyAgICAgICAgQVNTRVJUKGV4cC5maWVsZC5pbXBsKCktPmlzQXRv
bWljKCkpOworICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2Fy
eSwgc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KGV4cC5maWVsZC5pbXBsKCkpLCBTeW1i
b2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgfQogCi0gICAgbV9zb3VyY2VC
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZSwgYnl0ZVNpemUpOwotICAgIG1fbW9k
dWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhw
b3J0U3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7Ci0gICAgbV9j
b2RlQmxvY2tzW2NvZGVCbG9jay0+bW9kZSgpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9
CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgK
aW5kZXggNzA0MDY4YzY1ZGUxM2ViYjJiNmE4OGQ1OWJlNTZlNThlNmJiM2IwOC4uZTg0NzQ5YjIy
NjFlMzk3MDhlZDc2ZGZmYzE3ZjQxNzVmMDQ5ZThlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNDgsMzQgKzQ4LDMz
IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAot
ICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgc3RhdGlj
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNlLCBSZWZQdHI8V2FzbTo6UGxhbj4mJik7
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9Ci0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gdGFrZVJl
c2VydmVkTWVtb3J5KCkgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LnRha2VS
ZXNlcnZlZE1lbW9yeSgpOyB9CiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsgfQogICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXhTcGFjZSk7CiAgICAgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgY29kZSBibG9jayB0
aGF0IHRoaXMgbW9kdWxlIHdhcyBvcmlnaW5hbGx5IGNvbXBpbGVkIGV4cGVjdGluZyB0byB1c2Uu
IFRoaXMgd29uJ3QgbmVlZCB0byByZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW21fbW9kdWxlSW5mb3JtYXRpb24t
Pm1lbW9yeS5tb2RlKCldLmdldCgpOyB9Ci0gICAgLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUg
Y29kZSBibG9jayBmb3IgdGhlIGdpdmVuIG1lbW9yeSwgcG9zc2libHkgdHJpZ2dlcmluZyBhIHJl
Y29tcGlsZS4KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soVk0mLCBFeGVj
U3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayogY29kZUJsb2NrKFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9j
a3NbbW9kZV0uZ2V0KCk7IH0KKworICAgIEFycmF5QnVmZmVyJiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZUJ1ZmZlci5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6UGxhbiYs
IHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlID0gc3RkOjpudWxsb3B0KTsK
KyAgICBmcmllbmQgY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jazsKKyAgICB2b2lkIGFkZENv
ZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAotICAgIEpTV2ViQXNzZW1i
bHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
RXhlY1N0YXRlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpOworICAgIEpTV2Vi
QXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYpOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWZQdHI8V2FzbTo6UGxhbj4mJik7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1f
c291cmNlQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKKyAgICBSZWY8QXJyYXlCdWZmZXI+IG1fc291cmNlQnVm
ZmVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4g
bV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhw
b3J0U3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+
IG1fY29kZUJsb2Nrc1tXYXNtOjpNZW1vcnk6Ok51bWJlck9mTW9kZXNdOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGFjMzE4MWIzZjlkY2VlNGUxMzNiMDg3ZmY3MWY0
OTAxNWU0ODhkMmQuLmRhMjkzOGY4ZDAwYjhkOGIxZGJhMjdhYTIxOWRjMDVkNWFmZDg5NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21Q
bGFuLmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgpAQCAtNDUsOCArNDcsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCiBj
b25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IpIH07CiAKIC8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1
dC5oCkBAIC01NCwyNjkgKzU0LDUwIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfCiAgQGVuZAog
ICovCiAKK3VzaW5nIFdhc206OlBsYW47CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgYXV0byYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1
bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBl
eGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFqc01vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5J
bnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CisgICAgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9k
dWxlKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1i
bHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogCiAg
ICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQg
VHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4K
ICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNP
YmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlm
ICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50
IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1l
bnQpKSkpOwogICAgIAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0
dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLQotICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwg
aW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGlt
cG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKLXsKLSAgICBhdXRvJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOwotCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0
aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0KLSAgICBhdXRvIGV4Y2VwdGlv
biA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQot
ICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlw
ZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAg
ICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkK
LSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8g
aW1wb3J0cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0
cyIpKSk7Ci0KLSAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQo
UHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5j
ZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9u
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0KLSAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5n
ZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7Ci0KLSAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMg
YmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywg
V2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMs
IHJlc3BlY3RpdmVseS4KLSAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkg
bGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25z
ID0gMDsKLSAgICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsKLQotICAgIGJvb2wgaGFz
TWVtb3J5SW1wb3J0ID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOwot
ICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgotICAgIGZvciAoYXV0
byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewotICAgICAgICAvLyAxLiBM
ZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVj
dCwgaS5tb2R1bGVfbmFtZSkuCi0gICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBp
bXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgLy8gMi4gSWYgVHlwZShv
KSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBvcnRN
b2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3Qi
KSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVs
ZVZhbHVlKSkpOwotCi0gICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3Jt
aW5nIEdldChvLCBpLml0ZW1fbmFtZSkKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2Fz
dDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc3dpdGNoIChpbXBvcnQua2lu
ZCkgewotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAg
ICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBp
LiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJv
ci4KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAg
IHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7Ci0KLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsK
LSAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBP
YmplY3Q6Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0g
ICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlv
bjsKLSAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlv
biwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAg
IC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJl
IG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1
cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdh
c21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCi0gICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWdu
YXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRj
aCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAgICAv
LyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWdu
YXR1cmUgd2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8g
SmF2YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0
LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCi0gICAgICAgICAg
ICAvLyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KLSAgICAgICAgICAg
IC8vIGl2LiBBcHBlbmQgdiB0byBmdW5jcy4KLSAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0
aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1l
bnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUp
IGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgotCi0gICAgICAgICAgICBBU1NFUlQobnVt
SW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldEltcG9ydEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKysp
OwotICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpU
YWJsZTogewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8g
VGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAg
ICAgICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAg
ICBoYXNUYWJsZUltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwot
ICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3Qs
IHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0
YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IGV4
cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlh
bCgpOwotICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7
Ci0gICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFs
JyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7Ci0KLSAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLm1heGltdW0oKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlm
ICghYWN0dWFsTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxl
IGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVz
IHRoYXQgaXQgZG9lcyIpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4g
KmV4cGVjdGVkTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9y
dGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3Rl
ZCAnbWF4aW11bSciKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpaS4gQXBw
ZW5kIHYgdG8gdGFibGVzLgotICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0g
dG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBv
cnQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhp
cyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSk7Ci0gICAgICAgICAg
ICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVl
KTsKLSAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9i
amVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1l
bW9yeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3Qg
YW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKLQotICAgICAgICAgICAgV2Fz
bTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5p
bml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1l
bW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOwotICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwg
PCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBp
bXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAg
ICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNv
dW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVs
ZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFjdHVh
bE1heGltdW0gPiBleHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdz
IGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYu
W1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2
bSwgZXhlYywgbWVtb3J5KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICAvLyA1LiBJZiBp
IGlzIGEgZ2xvYmFsIGltcG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGlt
bXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICAgICAgQVNTRVJUKG1v
ZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBX
YXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7Ci0gICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2Jh
bF90eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJB
c3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xv
YmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSk7Ci0gICAgICAgICAgICAv
LyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAg
ICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAg
ICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhd
LnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgot
ICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAg
IGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3du
IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9y
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYm
ICFoYXNNZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQ
dHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7Ci0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5ID0g
anNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVt
KCkpOwotICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywKLSAgICAgICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VO
b25OdWxsKCkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
bnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNy
ZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgLy8gVGhlcmUgYXJl
IHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhh
cyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2sgKHJ1bm5hYmxlKSwgc28gd2UganVzdCBuZWVkIHRv
IGZpbmFsaXplQ3JlYXRpb24uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxv
Y2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0Lgor
ICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVC
bG9jaywgc28gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgor
CisgICAgUmVmUHRyPFBsYW4+IHBsYW47CisgICAgaWYgKCFpbnN0YW5jZS0+cnVubmFibGUoKSkg
eworICAgICAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKQorICAgICAgICAgICAgcGxhbiA9
IFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuRm9yUHJvbWlzZShpbnN0YW5jZS0+
Y29kZUJsb2NrKCktPnByb21pc2UoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5z
dGFuY2UtPmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKHZtLCBudWxscHRyKTsKKyAgICAgICAgICAg
IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1vZHVsZS0+c291cmNlKCksIFBsYW46OkZ1
bGxDb21waWxlLCBQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICAgICAgICAgIHBsYW4tPnNldE1v
ZGUoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSk7CisgICAgICAgICAgICBXYXNtOjplbnN1cmVXb3Jr
bGlzdCgpLmVucXVldWUobnVsbHB0ciwgcGxhbik7CisgICAgICAgICAgICBwbGFuLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAoISFt
b2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVp
dGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNl
cHRpb24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9u
ICYmICFoYXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAv
LyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFi
bGVTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUlu
Zm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5t
YXhpbXVtKCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFs
bG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCi0gICAgICAgICAgICAv
LyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24g
YSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAotICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWlu
c3RhbmNlLT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15
IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBh
IG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAg
ICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpj
cmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlT
dHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOwotICAgIH0KLQot
ICAgIC8vIEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09
IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBmb3IgKHNp
emVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxl
SW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5k
ZXhdOwotICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2Fz
bTo6R2xvYmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0
aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRH
bG9iYWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4
LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJl
cikpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEds
b2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwotICAgIEpTVmFsdWUgc3Rh
cnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJB
TShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVh
dGlvbih2bSwgZXhlYywgcGxhbi5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShp
bnN0YW5jZSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmNwcAppbmRleCA1OTcwOWY1MTc1NmRjNTVlYTJiZDI3ODY2MzUwNWU5ZTM5MzdmMDEzLi4z
NTk5NjIyZjJjYTI0OWIxZTFkODEyMGNhMzYzYWQ2MTRlNWE2ZTc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcApAQCAtNzUsMTMgKzc1LDEzIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBidWZm
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBzaXplX3QgYnl0ZU9mZnNldDsKLSAgICBzaXplX3QgYnl0ZVNp
emU7Ci0gICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgYnVm
ZmVyLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3Vy
Y2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBleGVjLCBzdHJ1Y3R1
cmUsIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUmVmUHRyPFdhc206OlBsYW4+
IHBsYW4gPSBhZG9wdFJlZihuZXcgV2FzbTo6UGxhbih2bSwgKnNvdXJjZSwgV2FzbTo6UGxhbjo6
VmFsaWRhdGlvbiwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgaWYgKCFwbGFuLT5w
YXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0
dXJlKCksIHBsYW4tPmVycm9yTWVzc2FnZSgpKSk7CisgICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpLCBX
VEZNb3ZlKHBsYW4pKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCmluZGV4IGZmZmVlNWMxMGY1OWY4MWYxYmJlM2NmMWQ1NDc3Y2Y5MGM2ODdmNzAuLmZi
NTYxZDlkZGI4N2U3NDA3MjlhNjI5YjUxODYxNzA1NDkxNmJhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAKQEAgLTczLDggKzczLDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBXYXNtCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBv
cnRzKQotICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRFbnRyeTo6Y3JlYXRlTG9jYWwoZXhw
LmZpZWxkLCBleHAuZmllbGQpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUlu
Zm9ybWF0aW9uLmV4cG9ydHMpIHsKKyAgICAgICAgSWRlbnRpZmllciBmaWVsZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCBleHAuZmllbGQpOworICAgICAgICBhZGRFeHBvcnRFbnRyeShF
eHBvcnRFbnRyeTo6Y3JlYXRlTG9jYWwoZmllbGQsIGZpZWxkKSk7CisgICAgfQogfQogCiB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCkBAIC04NSwxNCArODcsMTMgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RhcnRGdW5jdGlvbik7CiB9
CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0oc2NvcGUpOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGluc3Rh
bmNlLT5tb2R1bGUoKTsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBp
bnN0YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCkBAIC0x
MTIsNyArMTEzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgICAgIC8vICAg
aWkuIChOb3RlOiBBdCBtb3N0IG9uZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGFueSBjbG9zdXJl
LCBzbyBmdW5jIGlzIHVuaXF1ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2NjdXJyYW5j
ZXMgaW4gdGhlIGxpc3QuIE1vcmVvdmVyLCBpZiB0aGUgaXRlbSB3YXMgYW4gaW1wb3J0IHRoYXQg
aXMgYWxyZWFkeSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0LCB0aGVuIHRoZSBv
cmlnaW5hbCBmdW5jdGlvbiBvYmplY3Qgd2lsbCBiZSBmb3VuZC4gRm9yIGltcG9ydHMgdGhhdCBh
cmUgcmVndWxhciBKUyBmdW5jdGlvbnMsIGEgbmV3IHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLikK
ICAgICAgICAgICAgIGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rpb25JbXBvcnRDb3VudCkgewog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2luZEluZGV4Owot
ICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBv
cnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBm
dW5jdGlvbkltcG9ydCkpCiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5j
dGlvbkltcG9ydDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTEyOCw3ICsxMjksNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUlu
ZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAg
ICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZC5zdHJp
bmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUs
IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLCBpbnN0YW5jZSwganNFbnRyeXBv
aW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAg
ICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
CiAgICAgICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gZmFsc2U7CiAgICAgICAg
IGJvb2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSB0cnVlOwogICAgICAgICBib29sIHB1dFJlc3Vs
dCA9IGZhbHNlOwotICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1
bGVFbnZpcm9ubWVudCwgZXhlYywgZXhwLmZpZWxkLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJv
d1JlYWRPbmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOworICAgICAg
ICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVsZCksIGV4cG9ydGVkVmFsdWUs
IHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3Vs
dCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHB1dFJlc3VsdCk7CiAgICAgfQogCkBAIC0xOTIs
NyArMTkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUq
IGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgQVNTRVJUKCFzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVy
blR5cGUoKSA9PSBXYXNtOjpWb2lkKTsKICAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNw
YWNlIDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVu
Y3Rpb25JbmRleFNwYWNlKS0+Z2V0KCk7CisgICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5j
dGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7
CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9u
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpz
RW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CkBAIC0yNTEsNyArMjUyLDcg
QEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1
bmN0aW9uSW5kaWNlc1tpXTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwg
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5j
ZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBq
c0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgZnVuY3Rpb25JbXBvcnQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZXZlciBpbXBvcnQgYSBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiwgd2Ugc2V0IHRoZSBpbXBvcnQgYXMgdGhlIHVud3JhcHBlZCB2YWx1
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5oCmluZGV4IDVkY2ViNDJkOGY4YzIwNjk4Mjk0YmFhMGM2YmJjZjQ5Yjhk
Y2Q0M2QuLjJiODM3MmU3YzdjMzM5NDc4ZTliZTc2NTE3N2ViODUyNDE2ZDQ3ZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJB
c3NlbWJseUZ1bmN0aW9uOwogCiAvLyBCYXNlZCBvbiB0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ug
c3BlY2lmaWNhdGlvbgpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKICAg
ICBzdGF0aWMgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYs
IFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYpOwogCi0gICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSopOworICAgIHZvaWQgbGluayhFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFs
dWF0ZShFeGVjU3RhdGUqKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGUxZWViYjNiZDY3N2NiMzI4OWIzMzk3MGE0
MzQ1Zjg0YjBiYTM4Mi4uMTNlZGVjMjFkZTFjNjIwYmYzYjI3MDQxNGI2ZTE2ZjM3NThjMTA2ZCAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAxNy0wMy0yNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFw
cGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogTWFrZSBXZWJBc3NlbWJseS5pbnN0YW50
aWF0ZS9jb21waWxlIHRydWx5IGFzeW5jaHJvbm91cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qczoK
KyAgICAgICAgKGFzeW5jLnRlc3RQcm9taXNlQVBJKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93
ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanM6CisgICAgICAgIChhc3NlcnQuZXEuYXN5bmMudGVz
dCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAodGVzdC5hc3luYy50ZXN0KToKKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeS5hc3luYy50ZXN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKGFzc2VydC50cnV0aHkpOiBEZWxldGVkLgorCiAyMDE3LTAzLTIyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBq
c05vbnRyaXZpYWxTdHJpbmcgZm9yIE51bWJlciB0b1N0cmluZyBvcGVyYXRpb25zCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIvSlNUZXN0cy93YXNt
L2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwppbmRleCBmMzQzYzZlOTNjNzMxMjVlNDlhZDkzZjRh
YTcyYTFhMDllNjllMmJiLi43MGEzNzA4MWU5ZTAwZTNlNDZmMjhjMDNkYzRhZDQyNGQzYWIwYWU3
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCisrKyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTEsMyArMSw1IEBACith
c3luY1Rlc3QoNCk7CisKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwog
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKQEAgLTE0LDM5ICsxNiwzMyBA
QCBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICAgICAgICAgIC5Db2RlKCkK
ICAgICAgICAgICAgIC5FbmQoKTsKIAotICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICB0
aHJldyA9IHRydWU7CiAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJB
c3NlbWJseS5Db21waWxlRXJyb3IpOwotICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3Nh
Z2UgPT09ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDM6
IE1lbW9yeSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5IChl
dmFsdWF0aW5nICdXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDM6IE1lbW9yeSBzZWN0aW9u
IGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CisgICAgICAgICAgICBh
c3luY1Rlc3RQYXNzZWQoKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3
KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICB0
cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgpOwogICAgICAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKICAgICAgICAgICAgIGFzc2Vy
dC50cnV0aHkoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcik7CiAgICAgICAgICAgICBhc3NlcnQuZXEo
ZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3Ig
YW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5LmNvbXBpbGUoKScpIik7Cisg
ICAgICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQu
dHJ1dGh5KHRocmV3KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNl
OwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgy
MCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAg
ICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAg
ICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5
QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29t
cGlsZSgyMCknKSIpOworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgICAgIH0K
LSAgICAgICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7CiAgICAgfQogCiAgICAgewpAQCAtNjAsMTEg
KzU2LDggQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAKICAgICAgICAgbGV0
IG1vZHVsZSA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKTsKICAgICAgICAgYXNzZXJ0LnRydXRoeShtb2R1bGUgaW5zdGFuY2VvZiBXZWJBc3Nl
bWJseS5Nb2R1bGUpOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9Ci0KLSAgICBk
b25lID0gdHJ1ZTsKIH0KIAogdGVzdFByb21pc2VBUEkoKTsKLWRyYWluTWljcm90YXNrcygpOwot
YXNzZXJ0LnRydXRoeShkb25lKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2Vi
LWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1i
bHktaW5zdGFudGlhdGUuanMKaW5kZXggYTkzYmM2MDVmZjE3ZGRlZTgwMWY3YTc1MzM0MTg2YTg2
MWQ0NDJhZC4uNzJmYzQ3ZTI1MmRkNzQ0YmNmMjA4NWE5NGYxNmJmYWJjNTBhMGM0MCAxMDA2NDQK
LS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanMKKysr
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanMKQEAgLTEs
MyArMSw1IEBACithc3luY1Rlc3QoNyk7CisKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKQEAgLTE5
LDE4ICsyMSwxNSBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAx
KTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAg
IGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAg
bGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJp
bik7CiAgICAgICAgIGFzc2VydC50cnV0aHkobW9kdWxlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHku
TW9kdWxlKTsKICAgICAgICAgYXNzZXJ0LnRydXRoeShpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFz
c2VtYmx5Lkluc3RhbmNlKTsKICAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9v
KDIwKSwgMSk7Ci0gICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQo
KTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNz
ZXJ0LnRydXRoeShkb25lKTsKKyAgIHRlc3QoKTsKIH0KIAogewpAQCAtNDgsMTkgKzQ3LDE2IEBA
IGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBm
YWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAg
ICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlKGJpbiwgbnVsbCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgYXNzZXJ0
LmVxKGUubWVzc2FnZSwgInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlKGJpbiwgbnVsbCknKSIpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUgPSB0
cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAgICB0ZXN0KCk7Ci0g
ICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKIH0KIAogewpA
QCAtNzgsMjAgKzc0LDE3IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5n
dGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwog
Ci0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAg
ICAgICB0cnkgewogICAgICAgICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdl
YkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbik7CiAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAg
ICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
KTsKLSAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCB2YWxpZGF0ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5
cGUsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3Rh
bnRpYXRlKGJpbiknKSIpOworICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBjb250cm9sIGZsb3cgcmV0dXJucyB3aXRo
IHVuZXhwZWN0ZWQgdHlwZSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMCIpOwogICAgICAgICB9Ci0g
ICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAK
ICAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShk
b25lKTsKIH0KIAogewpAQCAtMTEwLDE5ICsxMDMsMTYgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0
aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5z
dGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5
OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5t
ZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHku
TWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHtt
ZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1v
cnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAg
ICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7
CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2Vy
dC50cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTE0MSwyMCArMTMxLDE3IEBAIGFzc2VydC5lcShX
ZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBh
c3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICAgICAgbGV0IGlu
c3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5
OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5t
ZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHku
TWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHtt
ZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1v
cnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAg
ICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7
CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2Vy
dC50cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTE3MiwxOCArMTU5LDE1IEBAIGFzc2VydC5lcShX
ZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBh
c3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOwogICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJs
eS5pbnN0YW50aWF0ZShtb2R1bGUpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KGluc3RhbmNlIGlu
c3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwogICAgICAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIGFz
eW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFpbk1pY3JvdGFz
a3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC0yMDIsNyArMTg2LDYg
QEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBj
b25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9
IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CkBAIC0yMTAsMTAgKzE5
Myw4IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCiAgICAgICAgICAg
ICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1
ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3Rh
bnRpYXRlKDI1KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAg
IGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFpbk1pY3Jv
dGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305448</attachid>
            <date>2017-03-26 23:39:13 -0700</date>
            <delta_ts>2017-03-27 00:00:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170326233912.patch</filename>
            <type>text/plain</type>
            <size>224133</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li5iMjg0YjczMWE5NDQzYjM5
ZWJmNGZlNTA1MWZkM2QxZWVjZDA3OTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMTMgQEAKKzIwMTctMDMtMjYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2Fs
bGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAg
IChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6
OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAgICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGlt
ZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNz
YXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAg
ICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0KToKKyAg
ICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkKToKKyAgICAgICAgKGZ1bmN0aW9uVGVzdFdh
c21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRz
KToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VEZWZlcnJl
ZC5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCk6CisgICAgICAgICogcnVudGltZS9K
U1Byb21pc2VEZWZlcnJlZC5oOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cHJv
bWlzZUFzeW5jUGVuZGluZyk6CisgICAgICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwLgor
ICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIpOgorICAgICAgICAo
SlNDOjpKU1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcCk6CisgICAgICAgIChKU0M6OkpTUnVuTG9v
cFRpbWVyOjp+SlNSdW5Mb29wVGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6
dGltZXJEaWRGaXJlKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGlt
ZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIpOgorICAgICAg
ICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGltZS9K
U1J1bkxvb3BUaW1lci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuaC4KKyAgICAgICAgKiBydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJy
ZWRUaW1lcik6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpkb1dvcmspOgor
ICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6cnVuUnVuTG9vcCk6CisgICAgICAg
IChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJvbWlzZSk6CisgICAgICAg
IChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZSk6CisgICAg
ICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKToKKyAgICAg
ICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2spOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvVk0u
Y3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAg
ICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwOgorICAgICAgICAoSlNDOjpyZWplY3QpOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6cmVz
b2x2ZSk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGls
ZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICog
d2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
cHJvbWlzZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNhbGxlZXMp
OgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5kKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uOjppbnRlcm5hbEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAqIHdhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5Lmg6CisgICAgICAgICog
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1v
cnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9u
OjptYXhpbXVtKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Omhhc1Jl
c2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246OnRha2VSZXNlcnZlZE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeUluZm9ybWF0aW9uOjptb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBsYW4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzdGF0ZVN0cmluZyk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46Om1vdmVUb1N0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpwcmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENvdW50SG9sZGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6On5UaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OndhaXRGb3JDb21w
bGV0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cnVuKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZG9udEZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW9kZSk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OnNldE1vZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OmVycm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OmZhaWxlZCk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Omhhc1dvcmspOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpoYXNCZWVuUHJlcGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBs
YW5JbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmguCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxs
ZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgICogd2FzbS9X
YXNtV29ya2xpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnBy
aW9yaXR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVu
dDo6bXVsdGlUaHJlYWRlZCk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpRdWV1ZUVs
ZW1lbnQ6Om5leHRQcmlvcml0eSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjplbnF1
ZXVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmNvbXBsZXRlUGxhbkZvclByb21p
c2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6V29ya2xpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpXb3JrbGlzdDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZXhp
c3RpbmdXb3JrbGlzdE9yTnVsbCk6CisgICAgICAgIChKU0M6Oldhc206OmVuc3VyZVdvcmtsaXN0
KToKKyAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6V29ya2xpc3Q6Om5leHRUaWNrZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxp
emUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bik6
CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlND
OjpjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWRk
VW5pdGlhbGl6ZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVt
b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6cnVubmFibGUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9y
dEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0SW1w
b3J0RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnNldFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHVi
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6YWRkQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6YnVpbGRDb2RlQmxvY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOiBEZWxldGVkLgorICAg
ICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
b2R1bGU6OnNvdXJjZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnRha2VS
ZXNlcnZlZE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNvZGVCbG9ja0Zvcik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3I6OmNyZWF0ZUluc3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFs
dWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oOgorCiAy
MDE3LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IHdhc20gYnkgcmV0dXJuaW5nIGFmdGVyIHdlIGRvIFRMUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNjAwMzEwYzM3YWIxNGE3MmRmNTdhYjI5MWM4MmNhNzQwMzc4M2MwZC4uZWJh
NGMzMjA3YmQzZmJiNjNhMmMwYjM4YTYyNzk4NThkYWQzZGU3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTEzMTYsMTEgKzEzMTYsMTcgQEAKIAkJNTJDOTUyQjkxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVy
LmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDExRTdBMEI2RTAwM0Mx
OUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OworCQk1MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQg
LyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICov
OyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFG
N0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyog
V2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLzsgfTsKIAkJNTMz
QjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNt
T3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTM0MUZDNzAxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZDNkYxREFD
MzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovOyB9OwogCQk1MzQx
RkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZDNzExREFDMzQzQzAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJNTM0NjM4NzExRTcw
Q0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5M
b29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzIxRTcwRDAx
NTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLzsgfTsKKwkJNTM0NjM4NzUxRTcwRERF
QzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJv
bWlzZURlZmVycmVkVGltZXIuaCAqLzsgfTsKKwkJNTM0NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8q
IFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNB
RiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAg
Ki87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0OTAyODIx
QzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi87IH07CkBAIC0xMzU1LDYg
KzEzNjEsNyBAQAogCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBF
OTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBF
OTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2
IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovOyB9OwogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFF
NUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQg
LyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNGOEQyMDAxRTgzODdENDAwRDIxMTE2
IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5o
ICovOyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFE
IC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4
MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcCAqLzsgfTsKIAkJNTNGRDA0RDMxRDdBQjI3NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5n
Q29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNw
cCAqLzsgfTsKQEAgLTIyMzMsOCArMjI0MCw2IEBACiAJCUMyQ0YzOUMxMTZFMTVBODEwMERENjlC
RSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVy
T2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87IH07
CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZG
Q0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKLQkJQzJFNTI2QkUxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRjBGMkQx
MTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkg
LyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9OwogCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJh
c2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4MDAsMTEg
KzM4MDUsMTcgQEAKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFF
QjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVdvcmtsaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBC
IC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QbGFu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0
NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNF
NTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBi
My9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5o
OyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSdW5Mb29wVGltZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUnVu
TG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzQxRTcw
RERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9taXNlRGVm
ZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDg2QkI2MUMx
Nzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
NDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUeXBlZEFycmF5Q1Rl
c3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJyYXlDVGVzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zODQ1LDYgKzM4NTYsNyBAQAogCQk1M0Y0MEU5NDFENUE3QUVG
MDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5J
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZB
MkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ3ODgsOCArNDgwMCw2IEBACiAJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdy
YXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBK
U0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0Yz
OUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRp
bWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBUaW1lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4
RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFRp
bWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQwMTZCQUVFRTkwMDE4
N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2Nr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU5MDQsOCArNTkxNCw2IEBACiAJCQkJQTU0QzJBQUYxQzY1NDREMTAwQTE4RDc4IC8qIEhlYXBT
bmFwc2hvdC5oICovLAogCQkJCUE1MzExQzM0MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNo
b3RCdWlsZGVyLmNwcCAqLywKIAkJCQlBNTMxMUMzNTFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNu
YXBzaG90QnVpbGRlci5oICovLAotCQkJCUMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFw
VGltZXIuY3BwICovLAotCQkJCUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIu
aCAqLywKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJ
CQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywK
IAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8s
CkBAIC02MjczLDExICs2MjgxLDE0IEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8q
IFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBs
YW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICov
LAorCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLywK
IAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJ
QUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuY3BwICovLAogCQkJCUFE
NzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi8sCiAJCQkJNTNGRjdG
OUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgKi8sCiAJCQkJNTNGRjdGOTgx
REJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5oICovLAorCQkJCTUzMEZCMzAzMUU3QTEx
NDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovLAorCQkJCTUzMEZCMzAxMUU3QTBCNkUw
MDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NDM0LDYgKzY0NDUsOCBAQAogCQkJCTE0QTE1
NjMwMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5oICovLAogCQkJCUJDRDIw
MzQ3MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDM0
ODBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5oICovLAorCQkJCTUzNDYzODc2MUU3
MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8sCisJCQkJNTM0NjM4
NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggKi8sCiAJCQkJMTY5
OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oICovLAog
CQkJCTBGRTA1MDBGMUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1bWVudHMuY3BwICovLAog
CQkJCTBGRTA1MDEwMUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1bWVudHMuaCAqLywKQEAg
LTY4MjIsNiArNjgzNSw4IEBACiAJCQkJMEY3QzM5RkMxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4
cE9iamVjdElubGluZXMuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVn
RXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVn
RXhwUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5M
b29wVGltZXIuaCAqLywKIAkJCQk3MEIwQTlEMDFBOUI2NjIwMDAwMTMwNkEgLyogUnVudGltZUZs
YWdzLmggKi8sCiAJCQkJNTI3NzczREQxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNw
cCAqLywKIAkJCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLywK
QEAgLTgxMTYsNiArODEzMSw3IEBACiAJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwODFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMEZCMzAyMUU3QTBC
NkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTBD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgyMzUsNiArODI1MSw3IEBACiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYw
IC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4
OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNDYzODc1MUU3MERERUMw
MEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJF
QzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlu
a0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODUyMSw2ICs4NTM4LDcgQEAKIAkJCQlFM0ZGNzUz
MzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFM0MwOEUzQzFEQTQxQjgxMDAzOTQ3OEYgLyogRE9NSklUUGF0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEg
LyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM3QUQ4M0MxREE0OTI4NjAwRjNENDEy
IC8qIERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzN0FEODNE
MURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRSZWcuaCBpbiBIZWFkZXJzICovLApAQCAtODY5MCw3
ICs4NzA4LDYgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFDNjU0NEYyMDBBMThENzggLyogSGVhcFNu
YXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMxMUMzNjFDNzdDRUM1MDBFNkIxQjYgLyog
SGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzJFNTI2QkUxNTkwRUYw
MDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMEU1RUExRTQz
RDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkFERTY3
MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAq
LywKQEAgLTkxMzksNiArOTE1Niw3IEBACiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8q
IFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8q
IFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdF
ODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjhEMjAwMUU4
Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5
LmggaW4gSGVhZGVycyAqLywKQEAgLTk5NTgsNiArOTk3Niw3IEBACiAJCQkJMEZFQzg1MEQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUzMEZCMzA0MUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29y
a2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MjJBNjIxQzE1OEU2QTAwRTJFQjk4IC8q
IEIzQ29uc3RGbG9hdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4REY1MUJFOTNE
NTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDI1MSw2ICsxMDI3MCw3IEBACiAJCQkJMTRBRDkxMTcxRENBOTdGRDAwMTRGOUZF
IC8qIEV2YWxDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3MzQxRTIxREMyQ0U5
NjAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NDk4
MjAzMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTM0NjM4NzMxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMkRFMEYxOTc5RDVGRDAwMDZGRjRF
IC8qIEV4Y2VwdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDMyOCw3ICsxMDM0OCw2
IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVFMDBBMThENzggLyogSGVhcFNuYXBzaG90
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NFQ0EwMEU2QjFCNiAvKiBIZWFw
U25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMyRTUyNkJEMTU5MEVGMDAw
MDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJC
RDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElDU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8qIElkZW50aWZpZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xMDY1Miw2ICsxMDY3MSw3IEBACiAJCQkJOTkyQUJDRjkxQkVBOUJEMjAwNjQw
M0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTky
RjU2QjQxRTRFODRBNDAwMzU5NTNCIC8qIFJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldENvY29hLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4RUQ2NzQxQkVENzBBQzAwREQ4MDE3IC8qIFJlbW90ZUNv
bnRyb2xsYWJsZVRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzQ2Mzg3NzFFNzFFMDZF
MDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90ZUluc3BlY3Rpb25UYXJnZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTk1NTY2ODYxRTRFOEIwRjAwQUFFMTNDIC8qIFJlbW90ZUluc3Bl
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNTFFNEU4NEE4MDAzNTk1M0IgLyog
UmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKaW5kZXggZGRlZTI1ODNlNDllNmI5
NjkzOTA4MGUzMzhlYjVhOTljMDQwYjkyYy4uZmE3YjY0ZGE5YzQzMWY3ZjAyMTgxN2JiOTRhOTQ5
NmYxNmVjMTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rp
dml0eUNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0
eUNhbGxiYWNrLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRl
ICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRikKQEAgLTQwLDggKzQwLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOwogY2xhc3MgSGVhcDsKIAotY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrIDogcHVibGljIEhlYXBUaW1lciB7
CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSlNS
dW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHR5cGVkZWYgSlNSdW5Mb29wVGltZXIgQmFzZTsK
ICAgICBzdGF0aWMgUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZUZ1bGxUaW1l
cihIZWFwKik7CiAgICAgc3RhdGljIFJlZlB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZUVk
ZW5UaW1lcihIZWFwKik7CiAKQEAgLTcwLDIxICs3MSwyMSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBV
U0UoQ0YpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGlt
ZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAg
ICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsKICAgICB9CiAjZWxpZiBVU0UoR0xJQikK
ICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQotICAgICAgICA6IEhlYXBUaW1lcih2bSkK
KyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgICAgICAs
IG1fZGVsYXkoc19kZWNhZGUpCiAgICAgewogICAgIH0KICNlbHNlCiAgICAgR0NBY3Rpdml0eUNh
bGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2
bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDYzOTYxMjhkMDM4MzhjYTRhNzQ1NTBlZDkxNmRmNzdhMzI1ZDZiNDQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKLQotI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgotI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
Ci0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGliLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgCi1jb25zdCBDRlRpbWVJbnRlcnZhbCBIZWFwVGlt
ZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7Ci0KLUhlYXBUaW1lcjo6SGVh
cFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX2FwaUxvY2soJnZtLT5hcGlM
b2NrKCkpCi17Ci0gICAgc2V0UnVuTG9vcCh2bS0+aGVhcC5ydW5Mb29wKCkpOwotfQotCi12b2lk
IEhlYXBUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKLXsKLSAgICBpZiAo
bV9ydW5Mb29wKSB7Ci0gICAgICAgIENGUnVuTG9vcFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQo
KSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICAgICAgQ0ZSdW5M
b29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwotICAgICAgICBtX3J1bkxvb3AuY2xl
YXIoKTsKLSAgICAgICAgbV90aW1lci5jbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBpZiAocnVu
TG9vcCkgewotICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOwotICAgICAgICBtZW1zZXQoJm1f
Y29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkpOwotICAgICAgICBtX2Nv
bnRleHQuaW5mbyA9IHRoaXM7Ci0gICAgICAgIG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRp
bWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNfZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwg
SGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsKLSAgICAgICAgQ0ZSdW5Mb29w
QWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotICAgIH0KLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLSAgICBzZXRS
dW5Mb29wKDApOwotfQotCi12b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRp
bWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotewotICAgIEhlYXBUaW1lciogdGltZXIgPSBzdGF0
aWNfY2FzdDxIZWFwVGltZXIqPihjb250ZXh0UHRyKTsKLSAgICB0aW1lci0+bV9hcGlMb2NrLT5s
b2NrKCk7Ci0KLSAgICBSZWZQdHI8Vk0+IHZtID0gdGltZXItPm1fYXBpTG9jay0+dm0oKTsKLSAg
ICBpZiAoIXZtKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdl
IHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtLmdldCgpKTsKLSAgICAgICAgdGltZXItPmRvV29yaygpOwotICAgIH0KLQotICAg
IHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1
bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17Ci0gICAgQ0ZSdW5Mb29wVGltZXJT
ZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
KyBpbnRlcnZhbEluU2Vjb25kcyk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZv
aWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci0gICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0
RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBzX2Rl
Y2FkZSk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOwotfQotCi0jZWxpZiBVU0UoR0xJQikK
LQotY29uc3QgbG9uZyBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1ICog
MTA7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgaGVhcFRpbWVyU291cmNlRnVuY3Rpb25zID0gewot
ICAgIG51bGxwdHIsIC8vIHByZXBhcmUKLSAgICBudWxscHRyLCAvLyBjaGVjawotICAgIC8vIGRp
c3BhdGNoCi0gICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5jIGNhbGxiYWNrLCBncG9pbnRlciB1
c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsYmFjayh1c2Vy
RGF0YSk7Ci0gICAgfSwKLSAgICBudWxscHRyLCAvLyBmaW5hbGl6ZQotICAgIG51bGxwdHIsIC8v
IGNsb3N1cmVfY2FsbGJhY2sKLSAgICBudWxscHRyLCAvLyBjbG9zdXJlX21hcnNoYWxsCi19Owot
Ci1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0gICAgOiBtX3ZtKHZtKQotICAgICwgbV9h
cGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotICAgICwgbV90aW1lcihhZG9wdEdSZWYoZ19zb3VyY2Vf
bmV3KCZoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpKQotewotICAg
IGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCksICJbSmF2YVNjcmlwdENvcmVdIEhlYXBU
aW1lciIpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyLmdldCgpLCBbXShncG9p
bnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewotICAgICAgICBhdXRvJiBoZWFwVGltZXIgPSAq
c3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4odXNlckRhdGEpOwotICAgICAgICBnX3NvdXJjZV9zZXRf
cmVhZHlfdGltZShoZWFwVGltZXIubV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIEhlYXBUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgICAgIGhlYXBU
aW1lci50aW1lckRpZEZpcmUoKTsKLSAgICAgICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOwot
ICAgIH0sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyLmdldCgp
LCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Ci19Ci0KLUhlYXBUaW1lcjo6
fkhlYXBUaW1lcigpCi17Ci0gICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVyLmdldCgpKTsKLX0K
LQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSgpCi17Ci0gICAgbV9hcGlMb2NrLT5sb2Nr
KCk7Ci0KLSAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkgewotICAgICAgICAvLyBUaGUgVk0gaGFz
IGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgotICAgICAgICBtX2Fw
aUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOwotICAgICAgICBkb1dvcmsoKTsKLSAgICB9Ci0K
LSAgICBtX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVU
aW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5
X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSArIGludGVydmFsSW5T
ZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOwotfQot
Ci12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQotewotICAgIGdfc291cmNlX3NldF9yZWFk
eV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBzX2RlY2FkZSAq
IEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1bGVkID0gZmFsc2U7Ci19Ci0jZWxzZQot
SGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAgIDogbV92bSh2bSkKLXsKLX0KLQotSGVh
cFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmludmFsaWRhdGUo
KQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUpCi17Ci19Ci0K
LXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci19Ci0jZW5kaWYKLSAgICAKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI0NzFmNjBkYjhjNjM3NGM1NTAxOThkMGJlOWUy
ZmNjYThhNmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCisrKyAvZGV2L251bGwKQEAg
LTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlv
bi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTTG9jazsKLWNsYXNzIFZN
OwotCi1jbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SGVhcFRp
bWVyPiB7Ci1wdWJsaWM6Ci0gICAgSGVhcFRpbWVyKFZNKik7Ci0jaWYgVVNFKENGKQotICAgIHN0
YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCopOwotI2VuZGlm
Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKLQotICAgIHZvaWQgc2NoZWR1bGVUaW1lcihkb3Vi
bGUgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIHZvaWQgY2FuY2VsVGltZXIoKTsKLSAgICBib29s
IGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NjaGVkdWxlZDsgfQotCi0jaWYgVVNF
KENGKQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYp
OwotI2VuZGlmIC8vIFVTRShDRikKLSAgICAKLXByb3RlY3RlZDoKLSAgICBWTSogbV92bTsKLQot
ICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLSAgICBib29sIG1faXNTY2hlZHVsZWQgeyBm
YWxzZSB9OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19k
ZWNhZGU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fdGltZXI7Ci0gICAg
UmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29wOwotICAgIAotICAgIENGUnVuTG9vcFRp
bWVyQ29udGV4dCBtX2NvbnRleHQ7Ci0KLSAgICBMb2NrIG1fc2h1dGRvd25NdXRleDsKLSNlbGlm
IFVTRShHTElCKQotICAgIHN0YXRpYyBjb25zdCBsb25nIHNfZGVjYWRlOwotICAgIHZvaWQgdGlt
ZXJEaWRGaXJlKCk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3RpbWVyOwotI2VuZGlmCi0gICAg
Ci1wcml2YXRlOgotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2MzU2Njk0MTFlMTdkYzBhYzUyLi44Y2Jm
YTllODA0MGRjNjFlZmIwMTliMjE0NTU0NDU1ZTJmYTgzMWI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKQEAgLTQxLDExICs0MSwx
MSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGltZU11bHRpcGxpZXIgPSAxLjAgLyBzd2Vl
cFRpbWVUb3RhbDsKIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQog
ewotICAgIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihzd2VlcFRpbWVTbGljZSAqIHN3ZWVwVGlt
ZU11bHRpcGxpZXIpOworICAgIEJhc2U6OnNjaGVkdWxlVGltZXIoc3dlZXBUaW1lU2xpY2UgKiBz
d2VlcFRpbWVNdWx0aXBsaWVyKTsKIH0KIAogSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRh
bFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBUaW1lcihoZWFwLT52bSgpKQorICAgIDog
QmFzZShoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50QWxsb2NhdG9yKG51bGxwdHIpCiB7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCmlu
ZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3Yzc4OWE2YWUxMTk4MDNiZTYuLmRmMWNmYzkyNDk2
YTdkYTQ2NjEwZWFhMmY3NTZmZDNjYTVhYjVkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5jbHVkZSAiSlNSdW5Mb29wVGlt
ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzMs
OCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEhlYXA7CiBjbGFzcyBNYXJrZWRBbGxv
Y2F0b3I7CiAKLWNsYXNzIEluY3JlbWVudGFsU3dlZXBlciA6IHB1YmxpYyBIZWFwVGltZXIgewor
Y2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgZXhwbGljaXQgSW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc3RhcnRTd2VlcGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCmluZGV4IDZlMzE3NmMyY2M3NmI2ODQ0
YzNhZmViMDczYzZiY2ExM2Y0NWQzY2MuLjk0MGQzOWRlMjRhY2ZkMzJkOTZhNGFjMjFlZDJjMmE1
MzE3YzIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5l
Y2Vzc2FyeVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZO
ZWNlc3NhcnlUaW1lci5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBT
dG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIoVk0qIHZtKQotICAgIDog
SGVhcFRpbWVyKHZtKQorICAgIDogQmFzZSh2bSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKaW5kZXggYTY4MzE4NDc0ODlj
ODZjMzZiNjg5ZTE4ZGEwNDg2M2ExZTRlZTQ0NS4uZmViZjUxNmFmNTQ4NGIwY2JkMDgwNmQ0Y2Mz
NDlkOTc0OTdiZjI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9w
SWZOZWNlc3NhcnlUaW1lci5oCkBAIC0yNSwxNCArMjUsMTUgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAotY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGlt
ZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVi
bGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIEpTUnVuTG9vcFRpbWVy
IEJhc2U7CiAgICAgZXhwbGljaXQgU3RvcElmTmVjZXNzYXJ5VGltZXIoVk0qKTsKICAgICAKICAg
ICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ry
b25nSW5saW5lcy5oCmluZGV4IDZiODE5N2M2ODY2YTA1OTk1YjMyYTg4YmU3OTQxZGQwZmQxYjkw
YTYuLjIwNWZiMDRmYjY5MTQ3ZDhmZDVlNzJhZTEwYTAzMmQ1MWUxM2Q5ODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZ0lubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBhZDRhMzE0
MDhhNmIzNWIyOWQzYzU0YjkxYTM2OTBlNWU1MDEwYTQ3Li4zYTM4ZGNkOTc4NGZhNWU5N2M0ZmRk
OTM3Mjc0NDNmZjUwMmEwM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNjIsNiArNjIsNyBA
QAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUGFyc2VyRXJyb3Iu
aCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVy
cmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlJlbGVh
c2VIZWFwQWNjZXNzU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCkBAIC03
Myw4ICs3NCw5IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgotI2lu
Y2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldh
c21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgPGxv
Y2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOTA3LDgg
KzkwOSw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRHZXR0ZXJDb21wbGV4OjpzX2luZm8gPSB7
ICJET01KSVRHZXR0ZXJDb21wbGV4IiwgJkJhc2U6OnNfCiBjb25zdCBDbGFzc0luZm8gRE9NSklU
RnVuY3Rpb25PYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUpJVEZ1bmN0aW9uT2JqZWN0IiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShET01KSVRGdW5jdGlvbk9iamVj
dCkgfTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVB
cnJheSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGlt
ZUFycmF5KSB9OwogY29uc3QgQ2xhc3NJbmZvIFNpbXBsZU9iamVjdDo6c19pbmZvID0geyAiU2lt
cGxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShT
aW1wbGVPYmplY3QpIH07Ci1zdGF0aWMgYm9vbCB0ZXN0MjYyQXN5bmNQYXNzZWQgeyBmYWxzZSB9
Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jVGVzdCB7IGZhbHNlIH07CitzdGF0aWMgdW5zaWdu
ZWQgYXN5bmNUZXN0UGFzc2VzIHsgMCB9Oworc3RhdGljIHVuc2lnbmVkIGFzeW5jVGVzdEV4cGVj
dGVkUGFzc2VzIHsgMCB9OwogCiBFbGVtZW50SGFuZGxlT3duZXIqIEVsZW1lbnQ6OmhhbmRsZU93
bmVyKCkKIHsKQEAgLTEwNzcsNiArMTA3OSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKEV4ZWNTdGF0CiAj
ZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhB
cmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkFzeW5jVGVzdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkKEV4ZWNTdGF0ZSopOwogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqKTsKQEAgLTEzNDksNiAr
MTM1Myw5IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm1heEFyZ3Vt
ZW50cyIsIGZ1bmN0aW9uTWF4QXJndW1lbnRzLCAwKTsKIAorICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImFzeW5jVGVzdCIsIGZ1bmN0aW9uQXN5bmNUZXN0LCAxKTsKKyAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJhc3luY1Rlc3RQYXNzZWQiLCBmdW5jdGlvbkFzeW5jVGVzdFBhc3NlZCwgMSk7CisK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidGVzdFdh
c21Nb2R1bGVGdW5jdGlvbnMiLCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zLCAwKTsK
ICNlbmRpZgpAQCAtMTczMiwxMSArMTczOSwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJp
bnRJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEZJTEUqIG91dCkKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IGlmICh0ZXN0MjYyQXN5bmNUZXN0KSB7CisgICAgaWYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2Vz
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICAgICAg
aWYgKHZhbHVlLmlzU3RyaW5nKCkgJiYgV1RGOjplcXVhbChhc1N0cmluZyh2YWx1ZSktPnZhbHVl
KGV4ZWMpLmltcGwoKSwgIlRlc3QyNjI6QXN5bmNUZXN0Q29tcGxldGUiKSkKLSAgICAgICAgICAg
IHRlc3QyNjJBc3luY1Bhc3NlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpICYmIFdURjo6
ZXF1YWwoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCksICJUZXN0MjYyOkFzeW5j
VGVzdENvbXBsZXRlIikpIHsKKyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlcysrOworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewpAQCAtMzA0OSw2ICszMDU3LDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7CiB9CiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rlc3QoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBudW1iZXJPZkFzeW5jUGFzc2VzID0gZXhlYy0+YXJn
dW1lbnQoMCk7CisgICAgaWYgKCFudW1iZXJPZkFzeW5jUGFzc2VzLmlzVUludDMyKCkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRXhwZWN0
ZWQgZmlyc3QgYXJndW1lbnQgdG8gYSB1aW50MzIiKSk7CisKKyAgICBhc3luY1Rlc3RFeHBlY3Rl
ZFBhc3NlcyA9IG51bWJlck9mQXN5bmNQYXNzZXMuYXNVSW50MzIoKTsKKyAgICByZXR1cm4gZW5j
b2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Bc3luY1Rlc3RQYXNzZWQoRXhlY1N0YXRlKikKK3sKKyAgICBhc3luY1Rlc3RQYXNzZXMr
KzsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKIHN0YXRpYyBDU3RyaW5nIHZhbHVlV2l0aFR5cGVPZldhc21WYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSB3YXNtVmFsdWUpCkBA
IC0zMTU5LDIxICszMTg2LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBlCiAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsgMikKICAgICAgICAgQ1JBU0go
KTsKIAotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3Vy
Y2UtPnZlY3RvcigpKSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgcGxhbi5ydW4oKTsKLSAgICBp
ZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBt
b2R1bGU6ICIsIHBsYW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFu
ID0gYWRvcHRSZWYoKm5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291
cmNlLT52ZWN0b3IoKSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206OlBsYW46OkZ1bGxDb21waWxl
LCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgp
LmVucXVldWUocGxhbi5jb3B5UmVmKCkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29t
cGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdldCgpKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVk
KCkpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFu
LT5lcnJvck1lc3NhZ2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgaWYgKHBs
YW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKKyAgICBpZiAocGxh
bi0+aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JB
U0goKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIga2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4
ID0gVUlOVF9NQVg7Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXplQ2FsbGVlcygKICAgICAg
ICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpz
RW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxs
ZWUpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNh
bGxlZUluZGV4IC0gMSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBjYWxsZWVzLmFw
cGVuZChqc0VudHJ5cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMjA5LDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9u
cyhFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjYWxsZWVJbmRleDsK
ICAgICAgICAgICAgIH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRp
b24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVs
ZUluZm9ybWF0aW9uID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMzY2Niw3ICszNjk0LDcgQEAg
dm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXN0MjYyLWFzeW5jIikp
IHsKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Rlc3QgPSB0cnVlOworICAgICAgICAgICAgYXN5
bmNUZXN0RXhwZWN0ZWRQYXNzZXMrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKQEAgLTM3MzgsMjMgKzM3NjYsMzQgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25z
LCBjb25zdCBGdW5jJiBmdW5jKQogICAgIFdvcmtlciB3b3JrZXIoV29ya2Vyczo6c2luZ2xldG9u
KCkpOwogICAgIAogICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcigmdm0pOwotCiAgICAgaW50IHJlc3VsdDsKLSAgICBp
ZiAob3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAg
ICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9maWxlcjo6
RGF0YWJhc2U+KHZtKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgeworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xv
YmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBq
c051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOwotICAgIGdsb2JhbE9iamVjdC0+c2V0UmVt
b3RlRGVidWdnaW5nRW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVidWdnaW5nKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChvcHRpb25z
Lm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKLSAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICF2bS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIpCisgICAgICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFByb2ZpbGVyOjpEYXRhYmFzZT4odm0pOwogCi0gICAgdm0uZHJhaW5NaWNy
b3Rhc2tzKCk7Ci0gICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAodGVzdDI2MkFzeW5jVGVzdCA9PSB0
ZXN0MjYyQXN5bmNQYXNzZWQpID8gMCA6IDM7CisgICAgICAgIEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBqc051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOworICAgICAgICBnbG9i
YWxPYmplY3QtPnNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQob3B0aW9ucy5tX2VuYWJsZVJlbW90
ZURlYnVnZ2luZyk7CisgICAgICAgIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwor
ICAgICAgICBpZiAob3B0aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCisgICAgICAgICAg
ICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOworCisgICAgICAgIHZtLmRyYWluTWljcm90
YXNrcygpOworICAgIH0KKyNpZiBVU0UoQ0YpCisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXIt
PnJ1blJ1bkxvb3AoKTsKKyNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMubV9leGl0Q29kZSkKLSAg
ICAgICAgcHJpbnRmKCJqc2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsKKyAgICByZXN1bHQgPSBz
dWNjZXNzICYmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9PSBhc3luY1Rlc3RQYXNzZXMpID8g
MCA6IDM7CisKKyAgICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKSB7CisgICAgICAgIHByaW50Zigi
anNjIGV4aXRpbmcgJWQiLCByZXN1bHQpOworICAgICAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQ
YXNzZXMgIT0gYXN5bmNUZXN0UGFzc2VzKQorICAgICAgICAgICAgcHJpbnRmKCIgYmVjYXVzZSBl
eHBlY3RlZDogJWQgYXN5bmMgdGVzdCBwYXNzZXMgYnV0IGdvdDogJWQgYXN5bmMgdGVzdCBwYXNz
ZXMiLCBhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcywgYXN5bmNUZXN0UGFzc2VzKTsKKyAgICAgICAg
cHJpbnRmKCJcbiIpOworICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSkgewogICAg
ICAgICBpZiAoIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmls
ZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCkBAIC0zNzYyLDI0ICszODAxLDI4IEBAIGludCBydW5K
U0MoQ29tbWFuZExpbmUgb3B0aW9ucywgY29uc3QgRnVuYyYgZnVuYykKICAgICB9CiAKICNpZiBF
TkFCTEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkpCi0gICAgICAg
IHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBu
dW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgYm9vbCBmaXJlQXRFbmFibGVkID0K
LSAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQoKSB8fCBPcHRpb25z
OjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFmdGVyKCk7Ci0gICAgaWYgKE9wdGlv
bnM6OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmlyZUF0RW5hYmxlZCB8fCBP
cHRpb25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkpKQotICAgICAgICBwcmlu
dGYoIkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5jb3VudGVyZWQgJXUgY2hlY2tz
LlxuIiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgaWYg
KE9wdGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKLSAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVY
SVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIsIG51bWJlck9mU3RhdGlj
T1NSRXhpdEZ1enpDaGVja3MoKSk7Ci0gICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElUIEZVWlo6
IGVuY291bnRlcmVkICV1IGR5bmFtaWMgY2hlY2tzLlxuIiwgbnVtYmVyT2ZPU1JFeGl0RnV6ekNo
ZWNrcygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBpbGVUaW1lU3RhdHMgPSBKSVQ6OmNvbXBp
bGVUaW1lU3RhdHMoKTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGlsZVRpbWVLZXlzOwotICAg
IGZvciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQotICAgICAgICBjb21waWxlVGlt
ZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5i
ZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOwotICAgIGZvciAoQ1N0cmluZyBrZXkgOiBj
b21waWxlVGltZUtleXMpCi0gICAgICAgIHByaW50ZigiJTQwczogJS4zbGYgbXNcbiIsIGtleS5k
YXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIHsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6
KCkpCisgICAgICAgICAgICBwcmludGYoIkpTQyBFWENFUFRJT04gRlVaWjogZW5jb3VudGVyZWQg
JXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tzKCkpOworICAgICAgICBi
b29sIGZpcmVBdEVuYWJsZWQgPQorICAgICAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9j
YXRpb25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRP
ckFmdGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9zZUV4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVYRUNVVEFCTEUgQUxMT0NB
VElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4ZWN1dGFibGVB
bGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU9TUkV4aXRG
dXp6KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElUIEZVWlo6IGVuY291bnRl
cmVkICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09TUkV4aXRGdXp6Q2hlY2tz
KCkpOworICAgICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQg
JXUgZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29tcGlsZVRpbWVTdGF0cyA9IEpJVDo6
Y29tcGlsZVRpbWVTdGF0cygpOworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGlsZVRpbWVL
ZXlzOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tcGlsZVRpbWVTdGF0cykKKyAgICAg
ICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAgc3RkOjpz
b3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOworICAg
ICAgICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlzKQorICAgICAgICAgICAgcHJp
bnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGlsZVRpbWVTdGF0cy5nZXQo
a2V5KSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6Z2NBdEVuZCgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJl
ZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5j
cHAKaW5kZXggNjk2N2UwM2FmZTE1NDI0NGQxZTJkMGNiMDNhNDYxMDg5NDA1MDFkNS4uMWRhMDYw
MWY4OTc4ZTEwZmY4OTNjYTMxZTFiM2U4ZmJkZDI1MmM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZS5o
IgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiUHJvbWlzZURl
ZmVycmVkVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk5LDExICsxMDAsMTUgQEAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnVuY3Rpb24sIEpTVmFsdWUgdmFsdWUKIHZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNhbGxGdW5jdGlvbihleGVj
LCBtX3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1BlbmRpbmcgPSBleGVjLT52
bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJvbWlzZSh0aGlzKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0gbV9wcm9taXNlSXNBc3lu
Y1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHJlYXNvbikKIHsKICAgICBjYWxsRnVuY3Rpb24oZXhlYywgbV9yZWpl
Y3QuZ2V0KCksIHJlYXNvbik7CisgICAgYm9vbCB3YXNQZW5kaW5nID0gZXhlYy0+dm0oKS5wcm9t
aXNlRGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhpcyk7CisgICAgQVNTRVJU
X1VOVVNFRCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlzZUlzQXN5bmNQZW5kaW5n
KTsKIH0KIAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
RXhjZXB0aW9uKiByZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCAyNmY0YTgyZDA4Y2EwMjIwZWRkNTE5Njg1Mjk4MjJi
Y2FiOWFjNmZkLi4wOTIyYTk0ZDkzM2NjZWM1OWE0YTE3ZmNiZDIyYzM3MjNkYTUwY2U2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmgK
QEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJl
amVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJl
amVjdChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IHByb21pc2VBc3luY1BlbmRpbmcoKSB7IG1fcHJvbWlzZUlzQXN5bmNQZW5kaW5nID0gdHJ1ZTsg
fQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2VEZWZlcnJlZChWTSYsIFN0cnVj
dHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCosIEpTVmFsdWUs
IEpTVmFsdWUpOwpAQCAtNjQsNiArNjgsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBK
U1Byb21pc2VEZWZlcnJlZChWTSYpOwogCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9wcm9t
aXNlSXNBc3luY1BlbmRpbmcgeyBmYWxzZSB9OworI2VuZGlmCisKICAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+IG1fcHJvbWlzZTsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZXNvbHZl
OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjdhOWM3
YmVmMzQxZmI5ZjA0MWYzOTVkNTBhYzYxZjQ5NzViNTBhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCkBAIC0wLDAgKzEs
MTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCisKKyNp
bmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJKU1N0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDxnbGliLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0YpCisKK2NvbnN0IENGVGlt
ZUludGVydmFsIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAq
IDEwOworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorICAgIDogbV92
bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKK3sKKyAgICBzZXRSdW5Mb29w
KHZtLT5oZWFwLnJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNldFJ1bkxv
b3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCit7CisgICAgaWYgKG1fcnVuTG9vcCkgeworICAgICAg
ICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtD
RlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZSht
X3RpbWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7CisgICAgICAgIG1fdGlt
ZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAocnVuTG9vcCkgeworICAgICAgICBtX3J1bkxv
b3AgPSBydW5Mb29wOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVu
TG9vcFRpbWVyQ29udGV4dCkpOworICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7CisgICAg
ICAgIG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHNfZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlk
RmlyZSwgJm1fY29udGV4dCkpOworICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3Au
Z2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgfQorfQor
CitKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAgICBzZXRSdW5Mb29wKDAp
OworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJS
ZWYsIHZvaWQqIGNvbnRleHRQdHIpCit7CisgICAgSlNSdW5Mb29wVGltZXIqIHRpbWVyID0gc3Rh
dGljX2Nhc3Q8SlNSdW5Mb29wVGltZXIqPihjb250ZXh0UHRyKTsKKyAgICB0aW1lci0+bV9hcGlM
b2NrLT5sb2NrKCk7CisKKyAgICBSZWZQdHI8Vk0+IHZtID0gdGltZXItPm1fYXBpTG9jay0+dm0o
KTsKKyAgICBpZiAoIXZtKSB7CisgICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQs
IHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgICAgIHRpbWVyLT5tX2FwaUxvY2stPnVu
bG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgeworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKKyAgICAgICAgdGltZXItPmRvV29yaygpOworICAgIH0K
KworICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOworfQorCit2b2lkIEpTUnVuTG9vcFRp
bWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKK3sKKyAgICBDRlJ1
bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdl
dEN1cnJlbnQoKSArIGludGVydmFsSW5TZWNvbmRzKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gdHJ1
ZTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworICAgIENGUnVu
TG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0
Q3VycmVudCgpICsgc19kZWNhZGUpOworICAgIG1faXNTY2hlZHVsZWQgPSBmYWxzZTsKK30KKwor
I2VsaWYgVVNFKEdMSUIpCisKK2NvbnN0IGxvbmcgSlNSdW5Mb29wVGltZXI6OnNfZGVjYWRlID0g
NjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CisKK3N0YXRpYyBHU291cmNlRnVuY3MgSlNSdW5Mb29w
VGltZXJTb3VyY2VGdW5jdGlvbnMgPSB7CisgICAgbnVsbHB0ciwgLy8gcHJlcGFyZQorICAgIG51
bGxwdHIsIC8vIGNoZWNrCisgICAgLy8gZGlzcGF0Y2gKKyAgICBbXShHU291cmNlKiwgR1NvdXJj
ZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbgorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNhbGxiYWNrKHVzZXJEYXRhKTsKKyAgICB9LAorICAgIG51bGxwdHIsIC8v
IGZpbmFsaXplCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxsYmFjaworICAgIG51bGxwdHIs
IC8vIGNsb3N1cmVfbWFyc2hhbGwKK307CisKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1l
cihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygp
KQorICAgICwgbV90aW1lcihhZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZKU1J1bkxvb3BUaW1lclNv
dXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkpCit7CisgICAgZ19zb3VyY2Vfc2V0X25h
bWUobV90aW1lci5nZXQoKSwgIltKYXZhU2NyaXB0Q29yZV0gSlNSdW5Mb29wVGltZXIiKTsKKyAg
ICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1lci5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRh
dGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byYgcnVuTG9vcFRpbWVyID0gKnN0YXRpY19j
YXN0PEpTUnVuTG9vcFRpbWVyKj4odXNlckRhdGEpOworICAgICAgICBnX3NvdXJjZV9zZXRfcmVh
ZHlfdGltZShydW5Mb29wVGltZXIubV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKKyAgICAgICAg
cnVuTG9vcFRpbWVyLnRpbWVyRGlkRmlyZSgpOworICAgICAgICByZXR1cm4gR19TT1VSQ0VfQ09O
VElOVUU7CisgICAgfSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fdGlt
ZXIuZ2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKK30KKworSlNS
dW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcigpCit7CisgICAgZ19zb3VyY2VfZGVzdHJveSht
X3RpbWVyLmdldCgpKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKCkK
K3sKKyAgICBtX2FwaUxvY2stPmxvY2soKTsKKworICAgIGlmICghbV9hcGlMb2NrLT52bSgpKSB7
CisgICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0
IGdpdmUgdXAuCisgICAgICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIobV92bSk7CisgICAg
ICAgIGRvV29yaygpOworICAgIH0KKworICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3Zv
aWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRz
KQoreworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21v
bm90b25pY190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNFQ19QRVJfU0VDKTsKKyAg
ICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6Y2FuY2Vs
VGltZXIoKQoreworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdf
Z2V0X21vbm90b25pY190aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKKyAgICBt
X2lzU2NoZWR1bGVkID0gZmFsc2U7Cit9CisjZWxzZQorSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9v
cFRpbWVyKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCit7Cit9CisKK0pTUnVuTG9vcFRpbWVyOjp+
SlNSdW5Mb29wVGltZXIoKQoreworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRl
KCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUpCit7
Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKK30KKyNlbmRpZgor
ICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSdW5Mb29wVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2VjYjljYmM0M2I4MGQzMWVmOGI2YjA0
OWMxN2VmNWFjNGZjYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEdMSUIp
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0xvY2s7CitjbGFzcyBWTTsKKworY2xhc3MgSlNSdW5Mb29wVGltZXIgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNSdW5Mb29wVGltZXI+IHsKK3B1YmxpYzoKKyAg
ICBKU1J1bkxvb3BUaW1lcihWTSopOworI2lmIFVTRShDRikKKyAgICBzdGF0aWMgdm9pZCB0aW1l
ckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKTsKKyNlbmRpZgorCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCB+SlNSdW5Mb29wVGltZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZG9Xb3JrKCkgPSAwOworCisgICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbElu
U2Vjb25kcyk7CisgICAgdm9pZCBjYW5jZWxUaW1lcigpOworICAgIGJvb2wgaXNTY2hlZHVsZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzU2NoZWR1bGVkOyB9CisKKyNpZiBVU0UoQ0YpCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7CisjZW5kaWYgLy8g
VVNFKENGKQorCitwcm90ZWN0ZWQ6CisgICAgVk0qIG1fdm07CisKKyAgICBSZWZQdHI8SlNMb2Nr
PiBtX2FwaUxvY2s7CisgICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsKKyNpZiBVU0Uo
Q0YpCisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOworCisgICAgUmV0
YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOworICAgIFJldGFpblB0cjxDRlJ1bkxv
b3BSZWY+IG1fcnVuTG9vcDsKKworICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7
CisKKyAgICBMb2NrIG1fc2h1dGRvd25NdXRleDsKKyNlbGlmIFVTRShHTElCKQorICAgIHN0YXRp
YyBjb25zdCBsb25nIHNfZGVjYWRlOworICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7CisgICAgR1Jl
ZlB0cjxHU291cmNlPiBtX3RpbWVyOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZvaWQg
aW52YWxpZGF0ZSgpOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGRhOTk2ZWFhM2M2Y2NiNjBiZjEwOGI2OTk3
Mzg0MjZmNzFhNDk2N2MuLmEwZDkxMDkwZTYyYmNkYjI2NjFjMjg2ZDM0NDY3MjdjOTE1MTRlNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTI1Miw2ICsyNTIs
NyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCBu
dW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcyg4
LCAyKSAtIDEsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFP
ZkRGR0NvbXBpbGVyVGhyZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldvcmtlclRocmVhZHMo
LTEsIDApLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZG
VExDb21waWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0y
LCAwKSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mV2Fz
bUNvbXBpbGVyVGhyZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldvcmtlclRocmVhZHMoLTEs
IDApLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VQcm9maWxlciwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZGlzYXNzZW1ibGVCYXNlbGlu
ZUZvclByb2ZpbGVyLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKQEAgLTQyOCw2ICs0MjksOSBA
QCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHVzZUNvZGVD
YWNoZSwgdHJ1ZSwgTm9ybWFsLCAiSWYgZmFsc2UsIHRoZSB1bmxpbmtlZCBieXRlIGNvZGUgY2Fj
aGUgd2lsbCBub3QgYmUgdXNlZC4iKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1i
bHksIHRydWUsIE5vcm1hbCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkgZ2xvYmFsIG9iamVjdC4i
KSBcCisgICAgXAorICAgIHYoYm9vbCwgZmFpbFRvQ29tcGlsZVdlYkFzc2VtYmx5Q29kZSwgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIG5vIFdhc206OlBsYW4gd2lsbCBzdWNlc3NmdWxseSBjb21w
aWxlIGEgZnVuY3Rpb24uIikgXAorICAgIFwKICAgICB2KGJvb2wsIHNpbXVsYXRlV2ViQXNzZW1i
bHlMb3dNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgTWVtb3J5IG9iamVjdCB3
b24ndCBtbWFwIHRoZSBmdWxsICdtYXhpbXVtJyByYW5nZSBhbmQgaW5zdGVhZCB3aWxsIGFsbG9j
YXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGFtb3VudC4iKSBcCiAgICAgdihib29sLCB1c2VXZWJB
c3NlbWJseUZhc3RNZW1vcnksIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRv
IHVzZSBhIDMyLWJpdCBhZGRyZXNzIHNwYWNlIHdpdGggYSBzaWduYWwgaGFuZGxlciB0byBib3Vu
ZHMgY2hlY2sgd2FzbSBtZW1vcnkuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0
VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJl
YWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJl
ZFRpbWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJl
ZFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzVmYzE4N2E5ZTQ0ZDc2Njk3MDc1Mzg4NmQ3ZWIwODlh
YzMyNzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvbWlzZURlZmVycmVkVGltZXIuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCisKKyNpbmNsdWRlICJKU1Byb21pc2VEZWZl
cnJlZC5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNsdWRlICJWTS5oIgorCisj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQcm9taXNlRGVmZXJyZWRUaW1lcjo6UHJvbWlzZURl
ZmVycmVkVGltZXIoVk0mIHZtKQorICAgIDogQmFzZSgmdm0pCit7Cit9CisKK3ZvaWQgUHJvbWlz
ZURlZmVycmVkVGltZXI6OmRvV29yaygpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGFza0xvY2sp
OworICAgIGNhbmNlbFRpbWVyKCk7CisgICAgd2hpbGUgKCFtX3Rhc2tzLmlzRW1wdHkoKSkgewor
ICAgICAgICBKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0OworICAgICAgICBUYXNrIHRhc2s7Cisg
ICAgICAgIHN0ZDo6dGllKHRpY2tldCwgdGFzaykgPSBtX3Rhc2tzLnRha2VMYXN0KCk7CisgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJEb2luZyB3b3JrIG9uIHByb21pc2U6ICIsIFJhd1Bv
aW50ZXIodGlja2V0KSk7CisKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgYWxyZWFkeSBjYW5jZWxl
ZCB0aGVzZSBwcm9taXNlcy4KKyAgICAgICAgaWYgKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5z
KHRpY2tldCkpIHsKKyAgICAgICAgICAgIHRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWlu
TWljcm90YXNrcygpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB3YWl0aW5nVGFza3MgPSBt
X2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7CisgICAgICAgIGZvciAoY29uc3QgVGFzayYgdW5i
bG9ja2VkVGFzayA6IHdhaXRpbmdUYXNrcykgeworICAgICAgICAgICAgdW5ibG9ja2VkVGFzaygp
OworICAgICAgICAgICAgbV92bS0+ZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyNpZiBVU0UoQ0YpCisgICAgaWYgKG1fcGVuZGluZ1Byb21pc2VzLmlzRW1wdHkoKSAmJiBt
X3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFByb21pc2VzRmluaXNoKQorICAgICAgICBDRlJ1bkxv
b3BTdG9wKG1fcnVuTG9vcC5nZXQoKSk7CisjZW5kaWYKK30KKworI2lmIFVTRShDRikKK3ZvaWQg
UHJvbWlzZURlZmVycmVkVGltZXI6OnJ1blJ1bkxvb3AoKQoreworICAgIEFTU0VSVCghbV92bS0+
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJUKENGUnVuTG9vcEdl
dEN1cnJlbnQoKSA9PSBtX3J1bkxvb3AuZ2V0KCkpOworICAgIG1fc2hvdWxkU3RvcFJ1bkxvb3BX
aGVuQWxsUHJvbWlzZXNGaW5pc2ggPSB0cnVlOworICAgIENGUnVuTG9vcFJ1bigpOworfQorI2Vu
ZGlmCisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKEpTUHJv
bWlzZURlZmVycmVkKiB0aWNrZXQsIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4mJiBkZXBlbmRlbmNp
ZXMpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIEFTU0VSVChkZXBlbmRlbmNpZXNbaV0uZ2V0KCkgIT0gdGlja2V0KTsKKworICAg
IGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMuYWRkKHRpY2tldCwgVmVjdG9yPFN0cm9u
ZzxKU0NlbGw+PigpKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgcGVuZGluZyBwcm9taXNlOiAiLCBSYXdQb2lu
dGVyKHRpY2tldCkpOworICAgICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+
KCptX3ZtLCB0aWNrZXQpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1v
dmUoZGVwZW5kZW5jaWVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiQWRkaW5nIG5ldyBkZXBlbmRlbmNpZXMgZm9yIHByb21pc2U6ICIsIFJhd1BvaW50ZXIo
dGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kVmVjdG9yKGRl
cGVuZGVuY2llcyk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIHRpY2tldC0+cHJvbWlz
ZUFzeW5jUGVuZGluZygpOworI2VuZGlmCit9CisKK2Jvb2wgUHJvbWlzZURlZmVycmVkVGltZXI6
OmNhbmNlbFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQpCit7CisgICAg
QVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGJvb2wg
cmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMucmVtb3ZlKHRpY2tldCk7CisKKyAgICBpZiAocmVz
dWx0KQorICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ2FuY2VsaW5nIHByb21pc2U6ICIs
IFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAgICBhdXRvIGJsb2NrZWRUYXNrcyA9IG1fYmxvY2tl
ZFRhc2tzLnRha2UodGlja2V0KTsKKyAgICBmb3IgKGNvbnN0IFRhc2smIHRhc2sgOiBibG9ja2Vk
VGFza3MpCisgICAgICAgIHRhc2soKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBy
b21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKEpTUHJvbWlzZURlZmVycmVkKiB0
aWNrZXQsIFRhc2smJiB0YXNrKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGFza0xvY2sp
OworICAgIG1fdGFza3MuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZSh0aWNrZXQsIFdURk1vdmUodGFz
aykpKTsKKyAgICBpZiAoIWlzU2NoZWR1bGVkKCkpCisgICAgICAgIHNjaGVkdWxlVGltZXIoMCk7
Cit9CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2soSlNQ
cm9taXNlRGVmZXJyZWQqIGJsb2NraW5nVGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBBU1NF
UlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJUKG1f
cGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKGJsb2NraW5nVGlja2V0KSk7CisgICAgYXV0byByZXN1
bHQgPSBtX2Jsb2NrZWRUYXNrcy5hZGQoYmxvY2tpbmdUaWNrZXQsIFZlY3RvcjxUYXNrPigpKTsK
KyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjQxZjExNzQ5NTY1OTk4YmVm
ZjI4MzU3ZGIwNGUzM2YxZjJlMTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApAQCAtMCwwICsxLDc5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgorI2luY2x1ZGUgIlN0cm9uZy5oIgorI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNQcm9taXNlRGVmZXJy
ZWQ7CitjbGFzcyBWTTsKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3MgUHJvbWlzZURlZmVycmVkVGlt
ZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNSdW5M
b29wVGltZXIgQmFzZTsKKworICAgIFByb21pc2VEZWZlcnJlZFRpbWVyKFZNJik7CisKKyAgICB2
b2lkIGRvV29yaygpIG92ZXJyaWRlOworCisgICAgdm9pZCBhZGRQZW5kaW5nUHJvbWlzZShKU1By
b21pc2VEZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4mJiBkZXBlbmRlbmNpZXMpOwor
ICAgIC8vIEpTUHJvbWlzZURlZmVycmVkIHNob3VsZCBoYW5kbGUgY2FuY2VsaW5nIHdoZW4gdGhl
IHByb21pc2UgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuCisgICAgYm9vbCBjYW5jZWxQZW5kaW5n
UHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCopOworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gVGFzazsKKyAgICB2b2lkIHNjaGVkdWxlV29ya1Nvb24oSlNQcm9taXNlRGVmZXJy
ZWQqLCBUYXNrJiYpOworCisgICAgLy8gQmxvY2tlZCB0YXNrcyBzaG91bGQgb25seSBiZSByZWdp
c3RlcmVkIHdoaWxlIGhvbGRpbmcgdGhlIEpTIEFQSSBsb2NrLiBJZiB3ZSBkaWRuJ3QgcmVxdWly
ZSBob2xkaW5nIHRoZQorICAgIC8vIEpTIEFQSSBsb2NrIHRoZW4gdGhlcmUgbWlnaHQgYmUgYSBy
YWNlIHdoZXJlIHRoZSBwcm9taXNlIHlvdSBhcmUgd2FpdGluZyBvbiBpcyBydW4gYmVmb3JlIHlv
dXIgdGFzayBpcworICAgIC8vIHJlZ2lzdGVyZWQuCisgICAgdm9pZCBzY2hlZHVsZUJsb2NrZWRU
YXNrKEpTUHJvbWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworI2lmIFVTRShDRikKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJ1blJ1bkxvb3AoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+PiBtX3Bl
bmRpbmdQcm9taXNlczsKKyAgICBMb2NrIG1fdGFza0xvY2s7CisjaWYgVVNFKENGKQorICAgIGJv
b2wgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9taXNlc0ZpbmlzaCB7IGZhbHNlIH07Cisj
ZW5kaWYKKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxKU1Byb21pc2VEZWZlcnJlZCosIFRhc2s+PiBt
X3Rhc2tzOworICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8VGFzaz4+IG1f
YmxvY2tlZFRhc2tzOworfTsKKworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDg1MTE1NDJiNzdkZmM4ZTZmMmJlYWJmMWY4OTNjNzcz
OWFiNzRiMzguLmE2NTJkMDg4YjIzZTk5ZTU2ZGYwODdkOTA2YWU5ZjNhNzliZGE0ODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRl
ICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJv
Z3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5j
bHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgog
I2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgpAQCAtMTAzLDYgKzEwNCw3IEBACiAjaW5jbHVkZSAi
VW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRl
ICJWTUluc3BlY3Rvci5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldh
dGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtN
YXBEYXRhLmgiCkBAIC0xNzcsNiArMTc5LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwgdG9wVk1FbnRyeUZyYW1l
KG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAg
ICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRU
aW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVs
dCA/IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0cmlu
Z1RhYmxlKQogICAgICwgcHJvcGVydHlOYW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5l
dyBBcmdMaXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOWQ4NmFhMTlhOTMz
Y2VhMzhhYjVmMDIzMTg0NDU5Y2I2MDEwZjNiNy4uODFiODJlOTlhOTRkZWRiM2MzYTFjN2MyNjM2
OWY2YmMyZjIwOTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiAr
MTA2LDcgQEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOworY2xh
c3MgUHJvbWlzZURlZmVycmVkVGltZXI7CiBjbGFzcyBSZWdFeHBDYWNoZTsKIGNsYXNzIFJlZ2lz
dGVyOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CkBAIC0zODAsNiArMzgxLDcgQEAgcHVi
bGljOgogICAgIHN0ZDo6b25jZV9mbGFnIG1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZs
YWc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uPiBtX3dh
c21TaWduYXR1cmVJbmZvcm1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9t
aXNlRGVmZXJyZWRUaW1lcj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAgICAgCiAgICAgSlNDZWxs
KiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwogICAgIGNvbnN0IENsYXNzSW5m
byogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENsYXNzSW5mbzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKaW5kZXggZmNkYzhjZGRjNGRh
NjhkZDlkY2UxOTkwZDlkOTkxMmVkZDI5ZDY2OC4uYjU0MmI5MzMxNjliMDI0Mjk3ODA3ZGJmOGQ0
YWNmNzZmOTE3MTEzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5jcHAKQEAgLTMzLDEwICszMywxNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKK3VzaW5nIEpTQzo6V2FzbTo6
UGxhbjsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU1dlYkFzc2VtYmx5KTsKQEAgLTQ1LDQ1ICs1MiwxNjIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVj
U3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50
aWF0ZUZ1bmMoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWplY3QoRXhl
Y1N0YXRlKiBleGVjLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlLCBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZSkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKK30KKwogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gY2F0Y2hTY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2Ci0gICAgSlNWYWx1
ZSBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
Y2F0Y2hTY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0g
ICAgfQorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVy
RnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5k
ZW5jaWVzOworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2Jh
bE9iamVjdCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlz
ZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAgUmVmPFBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46OlZhbGlkYXRpb24sIFtzb3Vy
Y2UsIHByb21pc2UsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAgICBS
ZWZQdHI8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlz
ZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJvbWlz
ZSwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1ZhbHVlIG1vZHVsZSA9IEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2Vi
QXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKHBsYW4p
KTsKKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAg
IHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQogCi0gICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAg
ICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICB9KTsKKyAg
ICB9KSk7CisKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFu
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQog
CitlbnVtIGNsYXNzIFJlc29sdmUgeyBXaXRoSW5zdGFuY2UsIFdpdGhNb2R1bGVBbmRJbnN0YW5j
ZSB9Oworc3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVD
cmVhdGlvbih2bSwgZXhlYyk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAg
IHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoZW50cmllcyA9PSBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpCisgICAgICAgIHByb21p
c2UtPnJlc29sdmUoZXhlYywgaW5zdGFuY2UpOworICAgIGVsc2UgeworICAgICAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJt
b2R1bGUiKSksIG1vZHVsZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5jZSIpKSwgaW5zdGFuY2Up
OworICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWxs
eSByZWNvbXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgYWxsb2NhdGUgaXRzIGdhdGhlciBhbGwg
dGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJpb3IgdG8KKyAgICAvLyBnZW5lcmF0aW5n
IGFueSBjb2RlLiBJZiB3ZSBkaWRuJ3QgZG8gdGhpcyB3ZSBtaWdodCBjaG9vc2UgdG8gY29tcGls
ZSB3aXRoIFNpZ25hbGluZyBtZW1vcnkgYnV0IGFjdHVhbGx5IGdldCBhIEJvbnVkcyBDaGVja2lu
ZworICAgIC8vIG1lbW9yeSB0aGVuIGhhdmUgdG8gcmVjb21waWxlLgorICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwg
ZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9u
KCkpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBjYXNlczoKKyAg
ICAvLyAxKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gaW5pdGlhbGl6ZWQgQ29kZUJsb2Nr
LCBzbyB3ZSBoYXZlIG5vIG1vcmUgd29yayB0byBkby4KKyAgICAvLyAyKSBUaGUgaW5zdGFuY2Ug
aGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBhbmQgY29tcGlsZSB0aGUg
Y29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIHVuaW5p
dGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyBzb21lb25lIGVsc2UgaXMgY29tcGlsaW5nIGNvZGUgYW5k
IHdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciB0aGVtLgorCisgICAgaWYgKGluc3RhbmNlLT5pbml0
aWFsaXplZCgpKSB7CisgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNl
LCBtb2R1bGUsIGVudHJpZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9y
PFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgLy8gVGhlIGluc3RhbmNlIGtlZXBz
IHRoZSBtb2R1bGUgYWxpdmUuCisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxs
Pih2bSwgaW5zdGFuY2UpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGlu
Z1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKworICAgIGlmIChpbnN0
YW5jZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNj
aGVkdWxlQmxvY2tlZFRhc2soaW5zdGFuY2UtPmNvZGVCbG9jaygpLT5wbGFuKCkucGVuZGluZ1By
b21pc2UoKSwgWyZ2bSwgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllc10gKCkgewor
ICAgICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgp
OworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CisgICAgICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9k
dWxlLCBlbnRyaWVzKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
QVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgcmVw
YXJzZXMgdGhlIG1vZHVsZSBoZWFkZXIsIHdoaWNoIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuCisg
ICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1vZHVsZS0+c291cmNl
KCksIFBsYW46OkZ1bGxDb21waWxlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmll
c10gKFBsYW4mIHApIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOwor
ICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29u
KHByb21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzLCBwbGFuID0gV1RG
TW92ZShwbGFuKV0gKCkgeworICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAgICAg
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2Us
IG1vZHVsZSwgZW50cmllcyk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIGluc3RhbmNl
LT5hZGRVbml0aWFsaXplZENvZGVCbG9jayh2bSwgcGxhbi5jb3B5UmVmKCkpOworICAgIHBsYW4t
PnNldE1vZGUoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSk7CisgICAgV2FzbTo6ZW5zdXJlV29ya2xp
c3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworfQorCitzdGF0aWMgdm9pZCBjb21waWxlQW5k
SW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCkKK3sKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZl
cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKKworICAgIGF1dG8qIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKworICAgIFZlY3RvcjxTdHJv
bmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25n
PEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVy
LT5hZGRQZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisg
ICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46
OlZhbGlkYXRpb24sIFtzb3VyY2UsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0
XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJl
ZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVX
b3JrU29vbihwcm9taXNlLCBbc291cmNlLCBwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9i
amVjdCwgcGxhbiA9IFdURk1vdmUocGxhbildICgpIG11dGFibGUgeworICAgICAgICAgICAgVk0m
IHZtID0gcGxhbi0+dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0g
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5X
ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIHBsYW4uY29weVJl
ZigpKTsKKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAg
ICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnN0YW50aWF0ZSh2bSwgZXhlYywgcHJv
bWlzZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhNb2R1bGVBbmRJbnN0YW5j
ZSk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCku
ZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgQVBJIHRydWx5IGFzeW5jaHJvbm91
czogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NwotCiAgICAg
SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihjYXRjaFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIGF1dG8gcmVqZWN0ID0gWyZd
ICgpIHsKLSAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlv
bigpOwotICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uLT52
YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNl
KCkpOwotICAgIH07Ci0KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1l
bnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9i
amVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0
T2JqZWN0KSB7CkBAIC05MywyOSArMjE3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIAog
ICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIEpTVmFs
dWUgbW9kdWxlOwotICAgIGJvb2wgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gZmFsc2U7Ci0gICAg
aWYgKGZpcnN0QXJndW1lbnQuaW5oZXJpdHModm0sIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmluZm8o
KSkpIHsKLSAgICAgICAgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gdHJ1ZTsKLSAgICAgICAgbW9k
dWxlID0gZmlyc3RBcmd1bWVudDsKLSAgICB9IGVsc2UgewotICAgICAgICBtb2R1bGUgPSBXZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZmlyc3RBcmd1bWVu
dCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSA9IFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoZXhl
YywganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihtb2R1bGUpLCBpbXBvcnRPYmplY3QsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHJlamVj
dCgpOwotCi0gICAgaWYgKGZpcnN0QXJndW1lbnRJc01vZHVsZSkKLSAgICAgICAgcHJvbWlzZS0+
cmVzb2x2ZShleGVjLCBpbnN0YW5jZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoIm1vZHVs
ZSIpKSwgbW9kdWxlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5jZSk7Ci0g
ICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKGF1
dG8qIG1vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBmaXJz
dEFyZ3VtZW50KSkKKyAgICAgICAgaW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2UsIG1vZHVs
ZSwgaW1wb3J0T2JqZWN0LCBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpOworICAgIGVsc2UKKyAgICAg
ICAgY29tcGlsZUFuZEluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBmaXJzdEFyZ3VtZW50
LCBpbXBvcnRPYmplY3QpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5w
cm9taXNlKCkpOwogfQpAQCAtMTI5LDcgKzIzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIHNpemVf
dCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFdhc206OlBsYW4g
cGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgV2FzbTo6UGxhbiBw
bGFuKHZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBsYW46OlZhbGlkYXRpb24sIFBs
YW46OmRvbnRGaW5hbGl6ZSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cg
YW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9P
TS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCBmZThjM2YzYmEyMGE2ZmU2ODE1ZWIxNDQwYTU3ZmJk
YzIyOWJmZDljLi4wOGFiZGJjMDIxYjgxOGMzOTU1OTYxNjlhMWNkYTI0NWRlOThlNTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIK
ICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1h
dC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTM5LDE0ICs0MCwxOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVt
b3J5OwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBQbGFuOworfQorCiBjbGFzcyBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVs
ZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206
Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KQorICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVh
dGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgV2FzbTo6TWVtb3J5TW9kZSBt
b2RlLCBSZWY8V2FzbTo6UGxhbj4mJiBwbGFuLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICB7
Ci0gICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkp
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVyLCBzdGQ6OmZvcndhcmQ8QmFnPENhbGxM
aW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVjdG9yPFdhc206Oldhc21F
eGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2RlLCBjYWxsZWVDb3VudCk7CisgICAgICAgIGF1dG8q
IHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sodm0sIG93bmVyLCBtb2RlLCBXVEZNb3ZlKHBsYW4pLCBjYWxsZWVDb3VudCk7CiAg
ICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTU5LDcgKzY0LDE2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBmdW5jdGlv
bkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsgfQog
ICAgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAg
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdl
dCgpOyB9Ci0gICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisKKyAg
ICAvLyBEb24ndCBjYWxsIGludGlhbGl6ZSBkaXJlY3RseSwgdGhpcyBzaG91bGQgYmUgY2FsbGVk
IGZvciB5b3UsIGFzIG5lZWRlZCwgYnkgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNy
ZWF0aW9uLgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBj
b25zdCB7IHJldHVybiAhbV9wbGFuOyB9CisKKyAgICBXYXNtOjpQbGFuJiBwbGFuKCkgY29uc3Qg
eyBBU1NFUlQoIWluaXRpYWxpemVkKCkpOyByZXR1cm4gKm1fcGxhbjsgfQorCisgICAgYm9vbCBy
dW5uYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGluaXRpYWxpemVkKCkgJiYgIW1fZXJyb3JNZXNzYWdl
OyB9CisgICAgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSB7IEFTU0VSVCghcnVubmFibGUoKSk7IHJl
dHVybiBtX2Vycm9yTWVzc2FnZTsgfQorICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJs
eU1lbW9yeSopIGNvbnN0OwogCiAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
CiAgICAgewpAQCAtODksMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FsbGVlcygpW2Nh
bGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOwogICAgIH0K
IAotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlcygpCi0gICAg
ewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7
Ci0gICAgfQorICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlcygp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4q
PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOyB9CiAKICAg
ICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQog
ICAgIHsKQEAgLTEwMSw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENh
bGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9y
eU1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdhc206Ok1lbW9yeU1vZGUsIFJlZjxXYXNtOjpQ
bGFuPiYmLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpAQCAtMTI1LDYgKzEzNiw5IEBAIHByaXZhdGU6CiAg
ICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAg
QmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZlY3RvcjxXYXNtOjpXYXNt
RXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7CisgICAgLy8gVGhlIHBsYW4gdGhhdCBpcyBjb21w
aWxpbmcgdGhpcyBjb2RlIGJsb2NrLgorICAgIFJlZlB0cjxXYXNtOjpQbGFuPiBtX3BsYW47Cisg
ICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIFdhc206Ok1lbW9yeU1vZGUgbV9tb2RlOwog
ICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IGZhYzU3YWRkYWYwNzRlOWE4Y2Zl
NjA2MzMzNWYzMGRhMmU5NmQzYTIuLmFiNzIwMGVkZDUzMDRmYTJhY2JkNDk5ZDgwNWYzZDFkOTZh
MTZjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
ZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAg
QjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwg
V2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mKTsK
KyAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1
cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIE1lbW9yeU1vZGUpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSopOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTIyMSw2ICsyMjEsNyBA
QCBwcml2YXRlOgogCiAgICAgVk0mIG1fdm07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1faW5mbzsKKyAgICBNZW1vcnlNb2RlIG1fbW9kZTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsK
ICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBt
X2xvY2FsczsKQEAgLTI1OCw5ICsyNTksMTAgQEAgc3RhdGljIHZvaWQgc3RvcmVXYXNtQ29udGV4
dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQogICAgICAg
ICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYg
dm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwg
V2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUpCiAgICAg
OiBtX3ZtKHZtKQogICAgICwgbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKICAgICAs
IG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKQogewpAQCAtNDg2LDcgKzQ4OCw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4g
UGFydGlhbFJlCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMy
X3Qgc2l6ZU9mT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwotICAg
IGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykg
eworICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKICAgICAg
ICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRp
b24gKyBvZmZzZXQgPiBvZmZzZXQpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9y
eVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOwpAQCAtNTIyLDcgKzUyNCw3
IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKIAogaW5saW5l
IEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkK
IHsKLSAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5n
KQorICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQogICAgICAgICByZXR1
cm4gdHJhcHBpbmcobWVtb3J5T3ApOwogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KQEAgLTEyMjgs
NyArMTIzMCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAgICAgaml0LnJldCgpOwogfQog
Ci1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIHVuc2lnbmVkIG9wdExldmVsKQorRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0
IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRT
aWduYXR1cmVJbmRpY2VzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIG9wdExldmVsKQogewog
ICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4o
KTsKIApAQCAtMTIzNiw3ICsxMjM4LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21J
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLAogICAgIGNv
bXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0Nh
bGxIZWxwZXJzPigmdm0pOwogCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKLSAgICBCM0lSR2Vu
ZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscyk7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KHZtLCBpbmZvLCBw
cm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUpOwog
ICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcigmdm0sIGNvbnRleHQsIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8sIG1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggMjQ5ZDU3ODE0YTkyOGM0YmY5MjA2YmM4
NTI1NjRjMzZjNzg4OWE0ZS4uZGU1NmExYzNiMjNjNTcwNGZlMDUzMTliZDBhODVjMzFlNzdmOWEz
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgog
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBleHRlcm4gIkMiIHZvaWQgZHVtcFByb2NlZHVy
ZSh2b2lkKik7CkBAIC00Nyw3ICs0OCw3IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBqc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbDsK
IH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJl
SW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
KiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQg
b3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDlhN2E2NzI5YTcxZmJkZjA1MTc0YTFj
Y2MxMWE1NmY2MjcxZGNlYmMuLjU1Njk0MzVmNDEyZTY2YTZkNzQ4YzMzNThiYmQxNTM1MWNlNTIy
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTEwMiwxNCAr
MTAyLDE0IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhFeHRlcm5hbEtp
bmQga2luZCkKIH0KIAogc3RydWN0IEltcG9ydCB7Ci0gICAgSWRlbnRpZmllciBtb2R1bGU7Ci0g
ICAgSWRlbnRpZmllciBmaWVsZDsKKyAgICBTdHJpbmcgbW9kdWxlOworICAgIFN0cmluZyBmaWVs
ZDsKICAgICBFeHRlcm5hbEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5kZXg7IC8vIElu
ZGV4IGluIHRoZSB2ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07CiAKIHN0cnVj
dCBFeHBvcnQgewotICAgIElkZW50aWZpZXIgZmllbGQ7CisgICAgU3RyaW5nIGZpZWxkOwogICAg
IEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4g
dGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKQEAgLTI2MCw2ICsyNjAs
NyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIH0KIAogICAgIHVpbnQzMl90IGlt
cG9ydEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9
CiAKICAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IGYyYjk0MTE1Y2I2NGY2N2M2YjU4
NjFkZWRjOGMyYjk1MzdjNzNiYTIuLmQ0MjA1NjBiNzI0ZTRiNDY1NWQyNmFhY2NjN2Q0Y2UyMWFk
NGNhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oCkBAIC0xMTUsNyArMTE1LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIobnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uJ3MgbnVtYmVyIG9mIGxv
Y2FscyBpbiBncm91cCAiLCBpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihudW1iZXJP
ZkxvY2FscyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJGdW5jdGlv
biBzZWN0aW9uJ3MgIiwgaSwgInRoIGxvY2FsIGdyb3VwIGNvdW50IGlzIHRvbyBiaWcgIiwgbnVt
YmVyT2ZMb2NhbHMpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlw
ZSh0eXBlT2ZMb2NhbCksICJjYW4ndCBnZXQgRnVuY3Rpb24gbG9jYWwncyB0eXBlIGluIGdyb3Vw
ICIsIGkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkTG9jYWwo
dHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKSwgImNhbid0IGFkZCAiLCBudW1iZXJPZkxvY2Fs
cywgIiBGdW5jdGlvbiBsb2NhbHMgZnJvbSBncm91cCAiLCBpKTsKKyAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKSk7CiAg
ICAgfQogCiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJvZHkoKSk7CkBAIC0y
NjcsNyArMjY3LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICB1aW50MzJfdCBpbmRleDsK
ICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIGdldF9sb2Nh
bCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuZ2V0TG9jYWwoaW5k
ZXgsIHJlc3VsdCksICJjYW4ndCBnZXRfbG9jYWwgYXQgaW5kZXgiLCBpbmRleCk7CisgICAgICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldExvY2FsKGluZGV4LCByZXN1bHQpKTsKICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQpAQCAtMzA0LDcgKzMwNCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IHNldF9n
bG9iYWwncyBpbmRleCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKHZhbHVlLCAic2V0X2dsb2JhbCB2YWx1ZSIpOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChzZXRHbG9iYWwoaW5kZXgsIHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbnRl
eHQuc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBDYWxsOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgK
aW5kZXggZDEzZDBjNjYyZjk4OWQzZWRlNGU0ZGUwOWYyMjQ2Y2M3OTc2NmE5Yi4uNDRkYTBkZmMx
Nzg0ZGRmNWMwMGQ3YmI1OTQ2MzA2YWU2MGEyYjI1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBWTTsKIG5hbWVzcGFjZSBX
YXNtIHsKIAogLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLWVudW0gY2xhc3Mg
TWVtb3J5TW9kZSB7CitlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50OF90IHsKICAgICBCb3Vu
ZHNDaGVja2luZywKICAgICBTaWduYWxpbmcsCiAgICAgTnVtYmVyT2ZNZW1vcnlNb2RlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKaW5kZXggOGFjMDg2NjI3OGI1MTM5M2I2NjllYTA5YTdiNTQ4ZDZkOWE3NmIxNC4uNTkwOWZl
M2ZlODNjMTg4Mjg5MjU0MzRkZTY1NmFkYWEwMTQxNzcyYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC03NCw3ICs3
NCw3IEBAIFBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5u
ZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1lbW9yeUluZm9ybWF0aW9u
OjpNZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZWNvbXBpbGVNb2RlLCBib29sIGlz
SW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBp
bml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCkKICAgICA6IG1faW5pdGlh
bChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX2lzSW1wb3J0KGlz
SW1wb3J0KQpAQCAtODIsMjggKzgyLDYgQEAgTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9y
bWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXUKICAgICBS
RUxFQVNFX0FTU0VSVCghIW1faW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4aW11
bSB8fCBtX21heGltdW0gPj0gbV9pbml0aWFsKTsKICAgICBBU1NFUlQoISEqdGhpcyk7Ci0KLSAg
ICBpZiAoIXJlY29tcGlsZU1vZGUpIHsKLSAgICAgICAgaWYgKCFpc0ltcG9ydCkgewotICAgICAg
ICAgICAgaWYgKG1heGltdW0gJiYgbWF4aW11bS5ieXRlcygpID09IDApIHsKLSAgICAgICAgICAg
ICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWwsIG1heGlt
dW0sIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX3Jlc2VydmVkTWVtb3J5KTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX3Jlc2VydmVkTWVtb3J5LT5tYXhpbXVtKCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKS5ieXRlcygpID09IDApOwotICAgICAg
ICAgICAgICAgIG1fbW9kZSA9IG1fcmVzZXJ2ZWRNZW1vcnktPm1vZGUoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1v
cnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nKTsKLSAgICAgICAgICAgIGlmIChtX3Jlc2VydmVkTWVtb3J5KSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAgICAgICAgIG1fbW9k
ZSA9IG1fcmVzZXJ2ZWRNZW1vcnktPm1vZGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9tb2RlID0gTWVtb3J5OjpsYXN0QWxs
b2NhdGVkTW9kZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX21vZGUgPSAqcmVjb21waWxlTW9k
ZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNmRlMDcwYTEwNDUy
ZmY2YmIzYzVjMjUwNDExZjEwZTkxMzg5ZTRhMi4uZDE4MmM3M2NkNjUzODhjYWQ2NTlmNTdmYWUw
YzMyODMzZGVhZWNmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTU0LDIyICs1NCwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCghKnRoaXMpOwogICAgIH0KIAotICAgIE1lbW9yeUluZm9ybWF0aW9uKFZNJiwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+LCBib29sIGlzSW1wb3J0KTsKKyAgICBNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpOwogCiAgICAgUGFnZUNvdW50
IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4
aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIGJvb2wgaGFzUmVzZXJ2ZWRN
ZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5OyB9Ci0gICAgUmVmUHRyPE1l
bW9yeT4gdGFrZVJlc2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1vcnkoKSk7
IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5LnJlbGVhc2UoKTsgfQotICAgIE1lbW9yeU1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7
IHJldHVybiBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8TWVtb3J5
PiBtX3Jlc2VydmVkTWVtb3J5OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWwgeyB9OwogICAgIFBh
Z2VDb3VudCBtX21heGltdW0geyB9OwotICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApp
bmRleCAyMWQxZDBjN2QxZWFhYjJlNzJjYjM3ZTc5MTI0NThkNWZkM2U0YzNkLi5lNzM2YmJmMmYx
NzMyYWUyODQ4NDRmMzRlMjk5ODgzM2NiODY4NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMTYyLDExICsxNjIsMTEgQEAgYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBn
ZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmlu
ZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBt
b2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLSAgICAgICAgaW1wLm1vZHVsZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgbW9kdWxlU3RyaW5nKTsKKyAgICAgICAgaW1w
Lm1vZHVsZSA9IG1vZHVsZVN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotICAgICAgICBpbXAuZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKKyAgICAgICAgaW1wLmZpZWxkID0gZmllbGRTdHJpbmc7
CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoaW1wLmtp
bmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9k
dWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAg
ICAgICAgc3dpdGNoIChpbXAua2luZCkgewpAQCAtMzE2LDcgKzMxNiw3IEBAIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOwogICAgIEFTU0VSVCghbWF4aW11bVBhZ2VD
b3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQpOwogCi0gICAgbV9y
ZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbigqbV92bSwgaW5pdGlhbFBh
Z2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgbV9tb2RlLCBpc0ltcG9ydCk7CisgICAgbV9yZXN1
bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBt
YXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzc2
LDcgKzM3Niw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmll
bGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBv
cnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMoZmllbGRTdHJpbmcpLCAiZHVwbGljYXRl
IGV4cG9ydDogJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBleHBvcnROYW1lcy5hZGQo
ZmllbGRTdHJpbmcpOwotICAgICAgICBleHAuZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KG1fdm0sIGZpZWxkU3RyaW5nKTsKKyAgICAgICAgZXhwLmZpZWxkID0gZmllbGRTdHJpbmc7CiAK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoZXhwLmtpbmQp
LCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoZXhwLmtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGgg
RXhwb3J0J3Mga2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGM5NjE4YjU3
Y2E0MjJmMDFmZTlmNzlmNGMxNzk1MWEwZWI2Yjc1MGUuLjUwYTI4OTM1ZWYxM2Y5NjIwZmExNTY4
NDE3NmIxN2U4NGQ2NmMyYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgKQEAgLTQ0LDkgKzQ0LDkgQEAgc3RydWN0IE1vZHVsZVBhcnNlclJlc3Vs
dCB7CiBjbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMgUGFyc2VyPE1vZHVsZVBhcnNlclJlc3Vs
dD4gewogcHVibGljOgogCi0gICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29uc3QgdWludDhfdCog
c291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+IG1vZGUpCisKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3Vy
Y2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiAgICAgICAgIDogUGFyc2VyKHZtLCBzb3Vy
Y2VCdWZmZXIsIHNvdXJjZUxlbmd0aCkKLSAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAg
ICAgfQogCkBAIC02Niw3ICs2Niw2IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmLCBUeXBlJiBp
bml0RXhwclR5cGUpOwogCiAgICAgTW9kdWxlUGFyc2VyUmVzdWx0IG1fcmVzdWx0OwotICAgIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAgYm9v
bCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcAppbmRleCBiNjU0MjQ5MjY0ODEwYWZlMDlhMTcwOTk1MDRmNTYzMGJmODY1Y2M2
Li5iYTBkNDhhMGU3NWMxZjFjZWM5MmU5NzVjNGJjZjU4MDJjZmE1MzRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL01v
bm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUwLDMwICs0OSw2NSBAQAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotICAgIAotUGxhbjo6UGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2UpCi0gICAgOiBQbGFuKHZtLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKQorCitQbGFu
OjpQbGFuKFZNJiB2bSwgQXJyYXlCdWZmZXImIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4odm0sIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZS5kYXRhKCkpLCBzb3VyY2UuYnl0ZUxlbmd0aCgpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spKQoreworfQorCitQbGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2Us
IEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKHZtLCBz
b3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQogewogfQog
Ci1QbGFuOjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNl
TGVuZ3RoKQorUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90
IHNvdXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAg
ICA6IG1fdm0odm0pCisgICAgLCBtX2NvbXBsZXRpb25UYXNrKHRhc2spCiAgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VMZW5ndGgpCisgICAgLCBtX2Fz
eW5jV29yayh3b3JrKQoreworfQorCitjb25zdCBjaGFyKiBQbGFuOjpzdGF0ZVN0cmluZyhTdGF0
ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6SW5pdGlh
bDogcmV0dXJuICJJbml0aWFsIjsKKyAgICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6IHJldHVybiAi
VmFsaWRhdGVkIjsKKyAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDogcmV0dXJuICJQcmVwYXJlZCI7
CisgICAgY2FzZSBTdGF0ZTo6Q29tcGlsZWQ6IHJldHVybiAiQ29tcGlsZWQiOworICAgIGNhc2Ug
U3RhdGU6OkNvbXBsZXRlZDogcmV0dXJuICJDb21wbGV0ZWQiOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBsYW46Om1vdmVUb1N0YXRlKFN0YXRl
IHN0YXRlKQoreworICAgIEFTU0VSVChzdGF0ZSA+IG1fc3RhdGUpOworICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJtb3ZpbmcgdG8gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKHN0YXRlKSwgIiBmcm9t
IHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhtX3N0YXRlKSk7CisgICAgbV9zdGF0ZSA9IHN0YXRlOwor
fQorCit2b2lkIFBsYW46OmZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgU3RyaW5n
JiYgZXJyb3JNZXNzYWdlKQogeworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsaW5nIHdp
dGggbWVzc2FnZTogIiwgZXJyb3JNZXNzYWdlKTsKKyAgICBtX2Vycm9yTWVzc2FnZSA9IFdURk1v
dmUoZXJyb3JNZXNzYWdlKTsKKyAgICBjb21wbGV0ZShsb2NrZXIpOwogfQogCi1ib29sIFBsYW46
OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZWNvbXBp
bGVNb2RlKQorYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKIHsKKyAgICBBU1NF
UlQobV9zdGF0ZSA9PSBTdGF0ZTo6SW5pdGlhbCk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
InN0YXJ0aW5nIHZhbGlkYXRpb24iKTsKICAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZTsKICAg
ICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAg
c3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7Ci0gICAgICAgIE1vZHVs
ZVBhcnNlciBtb2R1bGVQYXJzZXIobV92bSwgbV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCByZWNv
bXBpbGVNb2RlKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcigmbV92bSwgbV9z
b3VyY2UsIG1fc291cmNlTGVuZ3RoKTsKICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IG1vZHVs
ZVBhcnNlci5wYXJzZSgpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7Ci0gICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICBmYWls
KGhvbGRMb2NrKG1fbG9jayksIFdURk1vdmUocGFyc2VSZXN1bHQuZXJyb3IoKSkpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG1fbW9kdWxlSW5mb3JtYXRp
b24gPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5tb2R1bGUpOwpAQCAtODIsNTIgKzExNiw0OCBAQCBi
b29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnlNb2Rl
PiByZWNvbXBpbGVNb2RlKQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgZnVuY3Rpb25JbmRl
eCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7
ICsrZnVuY3Rpb25JbmRleCkgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kKTsKKyAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIs
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBl
bmRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVu
ZCk7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIG1f
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBz
aXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlv
bkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAg
ICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCk7
CiAKLSAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihtX3Zt
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZv
cm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
cyk7CisgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oJm1f
dm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVsZUlu
Zm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRp
Y2VzKTsKICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5j
dGlvbkxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1
bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklY
TUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgZmFpbChob2xkTG9jayhtX2xv
Y2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24g
YXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFr
ZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVz
KCkpCiAgICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBz
dGFydFRpbWUpLm1pY3Jvc2Vjb25kcygpLCAiIHVzIHRvIHZhbGlkYXRlIG1vZHVsZSIpOworICAg
IGlmIChtX2FzeW5jV29yayA9PSBWYWxpZGF0aW9uKQorICAgICAgICBjb21wbGV0ZShob2xkTG9j
ayhtX2xvY2spKTsKKyAgICBlbHNlCisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpWYWxpZGF0
ZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBXZSBhcmUgY3JlYXRpbmcgYSBidW5jaCBv
ZiB0aHJlYWRzIHRoYXQgdG91Y2ggdGhlIG1haW4gdGhyZWFkJ3Mgc3RhY2suIFRoaXMgd2lsbCBt
YWtlIEFTQU4gdW5oYXBweS4KLS8vIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyB0aGF0IHdlIGd1
YXJhbnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIHVudGlsIGFsbCB0
aHJlYWRzCi0vLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUgZG9uZSBleGVjdXRpbmcu
Ci1TVVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxNZW1vcnlNb2Rl
PiByZWNvbXBpbGVNb2RlKQordm9pZCBQbGFuOjpwcmVwYXJlKCkKIHsKLSAgICBpZiAoIXBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBB
U1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6VmFsaWRhdGVkKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiU3RhcnRpbmcgcHJlcGFyYXRpb24iKTsKIAogICAgIFRyYWNlU2NvcGUgdHJhY2VTY29w
ZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2ViQXNzZW1ibHlDb21waWxlRW5kKTsKIAotICAg
IGlmIChyZWNvbXBpbGVNb2RlKQotICAgICAgICBBU1NFUlQobV9tb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5Lm1vZGUoKSA9PSByZWNvbXBpbGVNb2RlKTsKLQogICAgIGF1dG8gdHJ5UmVzZXJ2ZUNh
cGFjaXR5ID0gW3RoaXNdIChhdXRvJiB2ZWN0b3IsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiB3
aGF0KSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShz
aXplKSkpIHsKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFsbG9jYXRpbmcgZW5vdWdoIHNwYWNlIGZv
ciAiKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHNpemUpOwogICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQod2hhdCk7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGJ1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgYnVp
bGRlci50b1N0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0OCwxMzEgKzE3OCwxNTQgQEAgdm9pZCBQbGFuOjpy
dW4oc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZWNvbXBpbGVNb2RlKQogICAgICAgICBpZiAo
aW1wb3J0LT5raW5kICE9IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbUV4aXRT
dHVicy5zaXplKCk7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xu
KCJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRl
eCwgIjogIiwgaW1wb3J0LT5tb2R1bGUsICI6ICIsIGltcG9ydC0+ZmllbGQpOworICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVyICIs
IGltcG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIGltcG9ydC0+bW9kdWxlLCAiOiAiLCBpbXBvcnQt
PmZpZWxkKTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0LT5r
aW5kSW5kZXgpOwotICAgICAgICBtX3dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGV4aXRT
dHViR2VuZXJhdG9yKG1fdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9y
dEZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgbV93YXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVu
ZChleGl0U3R1YkdlbmVyYXRvcigmbV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRl
eCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOwogICAgIH0KIAotICAgIG1fY3VycmVudEluZGV4ID0g
MDsKKyAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6UHJlcGFyZWQpOworfQogCi0gICAgYXV0byBkb1dv
cmsgPSBbdGhpc10gewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgdWludDMy
X3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudElu
ZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXggPSBtX2N1cnJlbnRJ
bmRleDsKLSAgICAgICAgICAgICAgICArK21fY3VycmVudEluZGV4OwotICAgICAgICAgICAgfQor
Ly8gV2UgZG9uJ3QgaGF2ZSBhIHNlbWFwaG9yZSBjbGFzcy4uLiBhbmQgdGhpcyBkb2VzIGtpbmRh
IGludGVyZXN0aW5nIHRoaW5ncy4KK2NsYXNzIFBsYW46OlRocmVhZENvdW50SG9sZGVyIHsKK3B1
YmxpYzoKKyAgICBUaHJlYWRDb3VudEhvbGRlcihQbGFuJiBwbGFuKQorICAgICAgICA6IG1fcGxh
bihwbGFuKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9jayk7
CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcysrOworICAgIH0KIAotICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgICAgICBz
aXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlv
bkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKLSAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBtX3NvdXJjZUxlbmd0
aCk7Ci0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5k
ZXhdOwotICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlv
bkluZGV4OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIEFTU0VS
VCh2YWxpZGF0ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNU
b1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKSk7Ci0KLSAgICAgICAgICAgIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4oKTsKLSAgICAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlKCptX3ZtLCBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0sICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKLQotICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgICAgIGlmICghbV9lcnJv
ck1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291
bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4K
LSAgICAgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHBhcnNlQW5k
Q29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6
Om51bWJlcihmdW5jdGlvbkluZGV4KSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBtX2Z1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgflRocmVhZENvdW50SG9sZGVyKCkK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xvY2spOworICAgICAg
ICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKIAotICAgICAgICAgICAgICAgIC8v
IFdlIHdpbGwgdGVybWluYXRlIG9uIHRoZSBuZXh0IGV4ZWN1dGlvbi4KLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsgCi0gICAgICAgICAgICB9CisgICAgICAgIGlmICghbV9wbGFuLm1fbnVtYmVy
T2ZBY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgbV9wbGFuLmNvbXBsZXRlKGxvY2tlcik7Cisg
ICAgfQogCi0gICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9Owor
ICAgIFBsYW4mIG1fcGxhbjsKK307CiAKLSAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZTsKLSAg
ICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKLSAgICAgICAg
c3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit2b2lkIFBsYW46OmNvbXBpbGVGdW5j
dGlvbnMoKQoreworICAgIEFTU0VSVChtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZCk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIGNvbXBpbGF0aW9uIik7CiAKLSAgICB1aW50
MzJfdCB0aHJlYWRDb3VudCA9IE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSA/IFdURjo6bnVt
YmVyT2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAgICB1aW50MzJfdCBudW1Xb3JrZXJUaHJlYWRz
ID0gdGhyZWFkQ291bnQgLSAxOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRz
OwotICAgIHRocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bVdvcmtlclRocmVhZHMpOwotICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Xb3JrZXJUaHJlYWRzOyBpKyspCi0gICAgICAgIHRo
cmVhZHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZVRocmVhZCgianNjLndhc20tYjMtY29tcGlsYXRp
b24udGhyZWFkIiwgZG9Xb3JrKSk7CisgICAgaWYgKG1fc3RhdGUgPj0gU3RhdGU6OkNvbXBpbGVk
KQorICAgICAgICByZXR1cm47CisgICAgVGhyZWFkQ291bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZ1bmN0aW9uSW5k
ZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpKQorICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21waWxlZCk7Cisg
ICAgICAgIH0KIAotICAgIGRvV29yaygpOyAvLyBMZXQgdGhlIG1haW4gdGhyZWFkIGRvIHNvbWUg
d29yayB0b28uCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJj
ZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAg
ICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtm
dW5jdGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbklu
ZGV4XS5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVu
Z3RoKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4Owor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlv
bigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9k
dWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVy
ZUluZGljZXMpKTsKKworICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CisgICAgICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fdm0sIG1fY29tcGlsYXRp
b25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1f
bW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25h
dHVyZUluZGljZXMsIG1fbW9kZSk7CisKKyAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENv
bXBpbGVSZXN1bHQpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkdldHRpbmcgdGhlIGxvY2s6
IGZhaWwiKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0
aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBj
aG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZhaWwobG9ja2VyLCBtYWtlU3RyaW5n
KHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAi
LCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4g
RXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1f
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7
IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFy
c2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAgewotICAgICAgICAgICAgQ29tcGls
YXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbklu
ZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwordm9p
ZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgQVNTRVJUKG1f
c3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0
aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkg
eworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4
IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1f
dm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAg
ICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQu
Y29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4
dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlu
dGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAg
ICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIG1f
d2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21w
aWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBp
bGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25b
JWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRh
KCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNvbnRleHQuanNFbnRyeXBvaW50SklU
LCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY29udGV4dC5qc0Vu
dHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIobV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpjb250ZXh0LmpzRW50cnlwb2lu
dEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjb250
ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRp
b24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAgICAgICAgICAgICAgICBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNv
bXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNb
ZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0g
JXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkp
LCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAotICAgIGlmICh2ZXJib3Nl
IHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigi
VG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygp
LAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBtb2R1bGUiKTsKLSAg
ICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIFdl
YkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7
Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsKLSAgICAgICAgICAgIGlmICht
X21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBv
cnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBh
IHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVB
U0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxsLnRhcmdldCA9PSBVbmxp
bmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMKKyAgICAgICAgZm9yIChhdXRvJiB1bmxp
bmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0
ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4KSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5r
ZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0
aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQgPT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6
VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAgICAgID8gbV93YXNtRXhpdFN0dWJzLmF0KGNh
bGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkKICAg
ICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4
KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJnZXQgIT0gVW5saW5rZWRXYXNt
VG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRk
cmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleCAtIG1f
d2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVubGlua2VkV2FzbVRvV2FzbUNhbGw6
OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4IC0gbV93YXNtRXhp
dFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9mYWlsZWQg
PSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAg
IG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAgICAgICBtX2NvbXBsZXRpb25UYXNr
KCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7CisgICAgfQogfQogCi12
b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2b2lkIFBsYW46OndhaXRGb3JDb21wbGV0aW9u
KCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFs
RnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgV2Fz
bUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50
ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNh
bGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKLQotICAgICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6
OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBv
aW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+
d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRl
ZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YWl0IGNvbmRpdGlvbmFs
bHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHRvIGNvbXBsZXRlIC8gZmFpbC4K
KyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xvY2spOworICAgIH0KK30KIAotICAgICAgICBj
YWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVu
dHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpjYW5jZWwoKQoreworICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgewor
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUo
KTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgUGxhbiB3
YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNzYWdlIHBsZWFzZSBmaWxlIGEg
YnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgfQogfQogCisKIFBsYW46On5QbGFuKCkg
eyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5MDkzZWY2YmE4MTg0ZTQ1YzRmZTAwNzY2MmY0
Li43YWZkNjUwYzdmYTk1ZjY1NzJmZWQ5ZmRkNTgwMzdmOTA0MWZlNmIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEgKzQwLDkzIEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU1dlYkFz
c2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNt
IHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgVmVj
dG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQgZG9udEZpbmFsaXplKFBsYW4mKSB7IH0K
KyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChQbGFuJik+IENvbXBsZXRpb25UYXNrOwor
ICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07
CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNl
IHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgor
ICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiYsIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYs
IGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBi
b29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9u
cygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0ds
b2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNh
bGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChm
YWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKLSAgICB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0
IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBvcnRzKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5m
b3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAgICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25D
b3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwot
ICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAgICAgfQogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1f
bW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAogICAgIEJhZzxDYWxsTGlua0luZm8+JiYgdGFr
ZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwogICAg
ICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwogICAgIH0KIAogICAgIFZlY3Rv
cjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhpdFN0dWJzKCkKICAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNtRXhpdFN0dWJz
KTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkg
eyBtX21vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBzZXRQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VE
ZWZlcnJlZCogcHJvbWlzZSkgeyBtX3BlbmRpbmdQcm9taXNlID0gcHJvbWlzZTsgfQorICAgIEpT
UHJvbWlzZURlZmVycmVkKiBwZW5kaW5nUHJvbWlzZSgpIHsgcmV0dXJuIG1fcGVuZGluZ1Byb21p
c2U7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBlbnVtIGNs
YXNzIFN0YXRlIDogdWludDhfdCB7CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRl
ZCwKKyAgICAgICAgUHJlcGFyZWQsCisgICAgICAgIENvbXBpbGVkLAorICAgICAgICBDb21wbGV0
ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcg
dGhlIGxvY2suCisgICAgfTsKKworICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFlcnJvck1lc3NhZ2UoKS5pc051bGwoKTsgfQor
ICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGls
ZWQ7IH0KKyAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
Pj0gU3RhdGU6OlByZXBhcmVkOyB9CisKKyAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7Cisg
ICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRl
cjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRIb2xkZXI7CisKKyAgICB2b2lkIGNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CisKKyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRl
KTsKKyAgICB2b2lkIGZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdHJpbmcmJiBlcnJvck1l
c3NhZ2UpOworCisgICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUpOworCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gbV9tb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKQEAgLTEwMywxNiArMTM1LDI0IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4+IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29t
cGlsYXRpb25Db250ZXh0czsKIAotICAgIFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOworICAgIEpT
UHJvbWlzZURlZmVycmVkKiBtX3BlbmRpbmdQcm9taXNlIHsgbnVsbHB0ciB9OworICAgIENvbXBs
ZXRpb25UYXNrIG1fY29tcGxldGlvblRhc2s7CisKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIGNvbnN0IHVp
bnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKLSAgICBi
b29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICB1
aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKKyAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1f
Y29tcGxldGVkOworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6SW5pdGlhbCB9OworICAgIGNv
bnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAgICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVU
aHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1fY3VycmVudEluZGV4IHsgMCB9OwogfTsKIAor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5Jbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ODIwYzEyMjk3NDIwYTFkYzYzMmVhOTIzNTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQor
eworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5j
dGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgeworICAgICAgICBXYXNtSW50
ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5h
bEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpz
RW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZN
b3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwg
anNFbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNt
RW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZN
b3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRy
eXBvaW50Q2FsbGVlKTsKKworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgs
IGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgIH0KK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IDc1
ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMzNzRmY2FlNjU0NjEyMTQuLjkyMzg1OTRiYTk3ZjUzZjky
YWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVZhbGlkYXRlLmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNr
QnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBl
eHByCiAgICAgICAgIGlmICh0YXJnZXQuc2lnbmF0dXJlKCkgPT0gVm9pZCkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNzaW9u
U3RhY2suaXNFbXB0eSgpLCAiYnJhbmNoIHRvIGJsb2NrIG9uIGVtcHR5IGV4cHJlc3Npb24gc3Rh
Y2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNF
bXB0eSgpLCB0YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwgPyAiYnJhbmNoIG91
dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJsb2NrIiwgIiBvbiBlbXB0eSBleHByZXNzaW9u
IHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwgdGFyZ2V0LnNpZ25hdHVyZSgpKTsKICAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRih0YXJnZXQuc2lnbmF0dXJlKCkgIT0gZXhwcmVzc2lvblN0YWNr
Lmxhc3QoKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgZG9lc24ndCBtYXRjaCBibG9jaydzIHR5cGUi
KTsKIAogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0ZTI3ZTI4YzczMGYxY2ExYzVhNTk2NjVkZTVl
OThjNzhmM2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldh
c21Xb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKKworI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKKworY29uc3QgY2hhciogV29ya2xpc3Q6OnByaW9yaXR5U3RyaW5nKFByaW9yaXR5IHByaW9y
aXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFByaW9yaXR5OjpQcmVw
YXJhdGlvbjogcmV0dXJuICJQcmVwYXJhdGlvbiI7CisgICAgY2FzZSBQcmlvcml0eTo6U2h1dGRv
d246IHJldHVybiAiU2h1dGRvd24iOworICAgIGNhc2UgUHJpb3JpdHk6OkNvbXBpbGF0aW9uOiBy
ZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAgICBjYXNlIFByaW9yaXR5OjpTeW5jaHJvbm91czogcmV0
dXJuICJTeW5jaHJvbm91cyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0OjpUaHJlYWQgZmluYWwgOiBwdWJsaWMgQXV0b21hdGlj
VGhyZWFkIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEF1dG9tYXRpY1RocmVhZCBCYXNlOworICAg
IFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29yaykKKyAg
ICAgICAgOiBCYXNlKGxvY2tlciwgd29yay5tX2xvY2ssIHdvcmsubV9wbGFuRW5xdWV1ZWQpCisg
ICAgICAgICwgd29ya2xpc3Qod29yaykKKyAgICB7CisKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9uUGxhbihjb25zdCBBYnN0cmFjdExvY2tl
ciYpCisgICAgeworICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAg
ICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVudC5wbGFuKQorICAgICAgICAgICAgcXVldWUu
cG9wKCk7CisgICAgfQorCisgICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0
Lm1fcXVldWU7CisgICAgICAgIHN5bmNocm9uaXplLm5vdGlmeUFsbChsb2NrZXIpOworCisgICAg
ICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgeworCisgICAgICAgICAgICBQcmlvcml0eSBwcmlv
cml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICAgICAgaWYgKHByaW9yaXR5ID09
IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24pCisgICAgICAgICAgICAgICAgcmV0dXJuIFBv
bGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAgIGVsZW1lbnQgPSBxdWV1ZS50b3AoKTsKKyAg
ICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KKyAg
ICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpCisgICAg
ICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50LnBsYW4t
Pmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKwor
ICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhp
cyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFucy4K
KyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9uUGxhbihsb2NrZXIpOworICAg
ICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0KKworICAgIFdvcmtSZXN1bHQgd29yaygpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNvbXBsZXRlID0gWyZdICgpIHsKKyAgICAgICAg
ICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBXb3JrUmVz
dWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuKiBwbGFuID0gZWxlbWVu
dC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQocGxhbik7CisgICAgICAgIGlmICghcGxhbi0+
aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAgICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxhbi0+aGFzV29yaygpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBwbGFuLT5w
cmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xv
Y2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0UHJpb3JpdHkoKTsKKyAgICAgICAgICAgIHdv
cmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcGxh
bkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBzb21lIG9jY2FzaW9uYWxseSB0byBzZWUgaWYg
dGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5IGUuZy4gc3luY2hyb25vdXMsIHBsYW5zIHRo
YXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBsYW4tPmNvbXBpbGVGdW5jdGlvbnMoKTsKKyAg
ICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAgICAgICBhdHRlbXB0VG9SZW1vdmVD
b21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOworICAgICAgICByZXR1
cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBDb25kaXRpb24gc3luY2hyb25p
emU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0OworICAgIC8vIFdlIGNhbiBvbmx5IG1vZGlmeSBl
bGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4gQSBzeW5jaHJvbm91cyBjb21waWxlIG1pZ2h0
IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBpbiBvcmRlciB0byBib29zdCB0aGUgcHJpb3Jp
dHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7Cit9OworCit2b2lkIFdvcmtsaXN0OjpRdWV1
ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAg
IGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgorICAgICAgICBwcmlvcml0eSA9IFByaW9yaXR5
OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJpb3JpdHk6OlN5bmNo
cm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV29ya2xp
c3Q6OmVucXVldWUoUmVmUHRyPFBsYW4+IHBsYW4pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
Km1fbG9jayk7CisKKyAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvbWlzZSBpdCBtdXN0IGJl
IHN5bmNocm9ub3VzIHNvIHdlIHNob3VsZCBib29zdCB0aGUgcHJpb3JpdHkuCisgICAgUHJpb3Jp
dHkgcHJpb3JpdHkgPSBwbGFuLT5wZW5kaW5nUHJvbWlzZSgpID8gUHJpb3JpdHk6OlByZXBhcmF0
aW9uIDogUHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJF
bnF1ZXVpbmcgcGxhbiB3aXRoIHByaW9yaXR5OiAiLCBwcmlvcml0eVN0cmluZyhwcmlvcml0eSkp
OworICAgIG1fcXVldWUucHVzaCh7IHByaW9yaXR5LCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBs
YW4pIH0pOworICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsKK30KKwordm9p
ZCBXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseShQbGFuJiBwbGFuKQoreworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAgIC8vIHN0ZDo6
cHJpb3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBhbiBpdGVyYXRvciBvciBkZWNyZWFzZV9rZXku
Li4gOiggV2hpbGUgdGhpcyBpcyBncm9zcywgdGhpcyBmdW5jdGlvbgorICAgICAgICAvLyBzaG91
bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwu
CisgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9yaXR5UXVldWUg
dGhhdCBkb2Vzbid0IHN1Y2suCisgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFF1ZXVlRWxlbWVu
dD4gZWxlbWVudHM7CisgICAgICAgIHdoaWxlICghbV9xdWV1ZS5lbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAobV9xdWV1ZS50b3AoKS5wbGFuID09ICZwbGFuKSB7CisgICAgICAgICAgICAgICAg
UXVldWVFbGVtZW50IHRhcmdldCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgICAgICAgICAgbV9x
dWV1ZS5wb3AoKTsKKworICAgICAgICAgICAgICAgIHRhcmdldC5wcmlvcml0eSA9IFByaW9yaXR5
OjpTeW5jaHJvbm91czsKKyAgICAgICAgICAgICAgICBtX3F1ZXVlLnB1c2godGFyZ2V0KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsZW1lbnRz
LnB1c2hfYmFjayhtX3F1ZXVlLnRvcCgpKTsKKyAgICAgICAgICAgIG1fcXVldWUucG9wKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8gZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAg
ICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworCisgICAgICAgIGZvciAoYXV0byYgdGhyZWFk
IDogbV90aHJlYWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50LnBsYW4gPT0g
JnBsYW4pCisgICAgICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnByaW9yaXR5ID0gUHJpb3Jp
dHk6OlN5bmNocm9ub3VzOworICAgICAgICB9CisgICAgfQorCisgICAgcGxhbi53YWl0Rm9yQ29t
cGxldGlvbigpOworfQorCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0p
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgLy8gc3RkOjpwcmlvcml0
eV9xdWV1ZSBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJhdG9yLi4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jv
c3MsIHRoaXMgZnVuY3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4g
YW5kIHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBo
YXZlIG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAgICBzdGQ6OnZl
Y3Rvcjxjb25zdCBRdWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOworICAgIHdoaWxlICghbV9xdWV1ZS5l
bXB0eSgpKSB7CisgICAgICAgIGlmICgmbV9xdWV1ZS50b3AoKS5wbGFuLT52bSgpID09ICZ2bSkg
eworICAgICAgICAgICAgbV9xdWV1ZS50b3AoKS5wbGFuLT5jYW5jZWwoKTsKKyAgICAgICAgICAg
IG1fcXVldWUucG9wKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBlbGVtZW50cy5wdXNoX2JhY2sobV9xdWV1ZS50b3AoKSk7CisgICAgICAgIG1fcXVldWUucG9w
KCk7CisgICAgfQorCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykKKyAgICAgICAg
bV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworCisgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVh
ZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuICYmICZ0aHJlYWQtPmVsZW1l
bnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sg
d2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNv
LgorICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnBsYW4tPmNhbmNlbCgpOworICAgICAgICAg
ICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KGxvY2tlcik7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1dvcmtsaXN0OjpXb3JrbGlzdCgpCisgICAgOiBtX2xvY2soQm94PExvY2s+OjpjcmVhdGUo
KSkKKyAgICAsIG1fcGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRl
KCkpCit7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMgPSBPcHRpb25z
Ojp1c2VDb25jdXJyZW50SklUKCkgPyBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA6IDE7
CisgICAgbV90aHJlYWRzLnJlc2VydmVDYXBhY2l0eShudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFk
cyk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRzOyBpKyspCisgICAgICAgIG1fdGhy
ZWFkcy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxXb3JrbGlzdDo6VGhyZWFkPihs
b2NrZXIsICp0aGlzKSk7Cit9CisKK1dvcmtsaXN0Ojp+V29ya2xpc3QoKQoreworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAgIG1fcXVldWUucHVzaCh7
IFByaW9yaXR5OjpTaHV0ZG93biwgbmV4dFRpY2tldCgpLCBudWxscHRyIH0pOworICAgICAgICBt
X3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdGhyZWFkc1tp
XS0+am9pbigpOworfQorCitzdGF0aWMgV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0OworCitXb3Jr
bGlzdCogZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpIHsgcmV0dXJuIGdsb2JhbFdvcmtsaXN0OyB9
CitXb3JrbGlzdCYgZW5zdXJlV29ya2xpc3QoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplV29ya2xpc3Q7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVdvcmts
aXN0LCBbXSB7CisgICAgICAgIGdsb2JhbFdvcmtsaXN0ID0gbmV3IFdvcmtsaXN0KCk7CisgICAg
fSk7CisgICAgcmV0dXJuICpnbG9iYWxXb3JrbGlzdDsKK30KKworCisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2ZGU3MmYzMmFhZjhk
Y2E1OGU2Njk1ZmQxZjlmOGJkNzFjMGNlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1ZGUgPHF1
ZXVlPgorCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTUHJvbWlzZURlZmVycmVkOwor
CituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFBsYW47CisKK2NsYXNzIFdvcmtsaXN0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXb3JrbGlzdCgpOworICAg
IH5Xb3JrbGlzdCgpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1ZXVlKFJlZlB0
cjxQbGFuPik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOworCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mKTsKKworICAg
IHZvaWQgYWN0aXZhdGVQbGFuKEpTUHJvbWlzZURlZmVycmVkKiwgUGxhbiopOworICAgIHZvaWQg
ZGVhY3RpdmVQbGFuKEpTUHJvbWlzZURlZmVycmVkKiwgUGxhbiopOworCitwcml2YXRlOgorICAg
IGNsYXNzIFRocmVhZDsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkOworCisgICAgdHlwZWRlZiB1
bnNpZ25lZCBUaWNrZXQ7CisgICAgVGlja2V0IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RH
cmFudGVkVGlja2V0Kys7IH0KKworICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgeworICAgICAgICBT
aHV0ZG93biwKKyAgICAgICAgU3luY2hyb25vdXMsCisgICAgICAgIENvbXBpbGF0aW9uLAorICAg
ICAgICBQcmVwYXJhdGlvbgorICAgIH07CisgICAgY29uc3QgY2hhciogcHJpb3JpdHlTdHJpbmco
UHJpb3JpdHkpOworCisgICAgc3RydWN0IFF1ZXVlRWxlbWVudCB7CisgICAgICAgIFByaW9yaXR5
IHByaW9yaXR5OworICAgICAgICBUaWNrZXQgdGlja2V0OworICAgICAgICBSZWZQdHI8UGxhbj4g
cGxhbjsKKworICAgICAgICB2b2lkIG5leHRQcmlvcml0eSgpOworICAgIH07CisKKyAgICBzdHJ1
Y3QgQ29tcGFyYXRvciB7CisgICAgICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yKCkoY29uc3Qg
UXVldWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbGVmdC50aWNrZXQgPiByaWdodC50aWNrZXQ7CisgICAgICAgICAg
ICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5OworICAgICAgICB9CisgICAg
fTsKKworICAgIEJveDxMb2NrPiBtX2xvY2s7CisgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CisgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQg
b3ZlcmZsb3cgYnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVz
dCBjb21waWxlIHRoaW5ncyBvZiB0aGUgc2FtZQorICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9u
ZyBvcmRlciwgd2hpY2ggaXNuJ3Qgd3JvbmcsIGp1c3Qgc3Vib3B0aW1hbC4KKyAgICBUaWNrZXQg
bV9sYXN0R3JhbnRlZFRpY2tldCB7IDAgfTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IFdURjo6VmVjdG9yIGJ1dCBXVEY6OlZlY3RvciBkb2VzIG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nl
c3MgaXRlcmF0b3IuCisgICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6
dmVjdG9yPFF1ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+IG1fcXVldWU7CisgICAgSGFzaE1hcDxK
U1Byb21pc2VEZWZlcnJlZCosIFBsYW4qPiBtX2FjdGl2ZVBsYW5zOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8VGhyZWFkPj4gbV90aHJlYWRzOworfTsKKworV29ya2xpc3QqIGV4aXN0aW5n
V29ya2xpc3RPck51bGwoKTsKK0pTX0VYUE9SVF9QUklWQVRFIFdvcmtsaXN0JiBlbnN1cmVXb3Jr
bGlzdCgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNhbGxlZS5oCmluZGV4IGI4Nzc3ZGEwZDRkN2ExMzBmNDIyNGVkNDVmY2NjMmQx
OWMxZjI3YzYuLmE4YTNkY2EzZDA5ZjVkZDM5ZGE2YjlhOGY5OTVkYzg1MDg5ODdhYzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVl
LmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVn
aXN0ZXJzOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206
OkVudHJ5cG9pbnQmJik7Ci0gICAgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXYXNtOjpFbnRyeXBvaW50JiYp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKIAogICAg
IFdhc206OkVudHJ5cG9pbnQgbV9lbnRyeXBvaW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXgg
ZmY4NzExNjgxOWEzMjI0MzllODFjYmQwNDY0NzJhMjZmMjE4M2Q4Yi4uZWI5NjA3M2I2OTk4YjAy
YTIwNzRhYjE1ZGY3NzQ2NzYyZDZmYjUxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTI5LDMxICsy
OSw2NyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNs
dWRlICJXYXNtUGxhbklubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNvZGVC
bG9jayIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNvZGVC
bG9jaykgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
ayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYm
IGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1
YnMsIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCitKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3Nl
bWJseU1vZHVsZSogb3duZXIsICBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNtOjpQbGFu
PiYmIHBsYW4sIHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAgIDogQmFzZSh2bSwgdm0ud2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2NhbGxMaW5rSW5mb3MoV1RG
TW92ZShjYWxsTGlua0luZm9zKSkKLSAgICAsIG1fd2FzbUV4aXRTdHVicyhXVEZNb3ZlKHdhc21F
eGl0U3R1YnMpKQorICAgICwgbV9wbGFuKFdURk1vdmUocGxhbikpCiAgICAgLCBtX21vZGUobW9k
ZSkKICAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCiB7CiAgICAgbV9tb2R1bGUuc2V0
KHZtLCB0aGlzLCBvd25lcik7CisgICAgQVNTRVJUKCFtb2R1bGUoKS0+Y29kZUJsb2NrKG1vZGUp
KTsKKyAgICBtb2R1bGUoKS0+bV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSld
LnNldCh2bSwgdGhpcywgdGhpcyk7CisKICAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxl
ZUNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsK
IH0KIAordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAoaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVk0mIHZtID0gcGxhbigp
LnZtKCk7CisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFwbGFuKCkuaGFzV29yaygpKTsKKworICAgIGlmIChwbGFuKCku
ZmFpbGVkKCkpIHsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwbGFuKCkuZXJyb3JNZXNzYWdl
KCk7CisgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVChwbGFuKCkubW9kZSgpID09IG1vZGUoKSk7CisgICAgQVNTRVJU
KHBsYW4oKS5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSA9PSBtX2NhbGxlZUNvdW50KTsKKworICAg
IG1fY2FsbExpbmtJbmZvcyA9IHBsYW4oKS50YWtlQ2FsbExpbmtJbmZvcygpOworICAgIG1fd2Fz
bUV4aXRTdHVicyA9IHBsYW4oKS50YWtlV2FzbUV4aXRTdHVicygpOworCisgICAgcGxhbigpLmlu
aXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5
cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJ
bmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgc2V0V2FzbUVudHJ5cG9pbnRDYWxs
ZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgfSk7CisKKyAg
ICBtX3BsYW4gPSBudWxscHRyOworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqPihjZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2soKTsKIH0KIAotYm9vbCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihK
U1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCitib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgY29uc3QKIHsKKyAgICBp
ZiAoIXJ1bm5hYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFdhc206Ok1lbW9y
eU1vZGUgY29kZU1vZGUgPSBtb2RlKCk7CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2Rl
ID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7CiAgICAgc3dpdGNoIChjb2RlTW9kZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJz
LmgKaW5kZXggZjAzMzEwZWE1ZTIwNjA2NTQxZDU4ZTcyNjRiMTg1ZTQzZDY5MzNkNC4uNTc4YTY5
ZjQ5ODE1YTgyNTIzYzExMjk0OGZiZDhlYTA5MDM1ZjIwMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCkBAIC03Myw2ICs3
MywyMiBAQCBBTFdBWVNfSU5MSU5FIHVpbnQ4X3QqIGdldFdhc21CdWZmZXJGcm9tVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBzaQogICAgIHJldHVybiBhcnJheUJ1ZmZlclZp
ZXcgPyBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXJWaWV3LT52ZWN0b3IoKSkgOiBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmltcGwoKS0+ZGF0YSgpKTsKIH0KIAor
QUxXQVlTX0lOTElORSBSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21W
YWx1ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBzaXplX3QgYnl0ZU9m
ZnNldDsKKyAgICBzaXplX3QgYnl0ZVNpemU7CisgICAgdWludDhfdCogZGF0YSA9IGdldFdhc21C
dWZmZXJGcm9tVmFsdWUoZXhlYywgdmFsdWUsIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgYXV0byBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7
CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNXZWJBc3NlbWJs
eUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIFdlYkFzc2VtYmx5RnVuY3Rp
b24qJiB3YXNtRnVuY3Rpb24sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiYgd2FzbVdyYXBw
ZXJGdW5jdGlvbikKIHsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6aW5mbygpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggMWMxMWIwY2E2NWM5MTc0MmY4
ZTQ4MTNjMjRkOTc1ZjY1ZWViYWExOC4uOTFkYTM5ZTI1N2UxNDMxM2IzNTM0ZjYzZWZkYTU2NTIy
OTgwNDU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0zMiwzMSArMzIsMTYgQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUg
IkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNp
bmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpzZXRNZW1vcnkoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSkKLXsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgLy8gV2UgY3JlYXRlIHN0dWIgbWVtb3JpZXMgZXZlbiBmb3IgbW9kdWxlcyB0aGF0IHNob3Vs
ZCBldmVudHVhbGx5IGdldCBhIG1lbW9yeSBzbyB3ZSB3YW50IHRvIGF2b2lkIHJlY29tcGxpbmcg
dGhlcmUuCi0gICAgaWYgKG1lbW9yeS0+bWVtb3J5KCkpIHsKLSAgICAgICAgYXV0byBjb2RlQmxv
Y2sgPSBtX2NvZGVCbG9jay0+bW9kdWxlKCktPmNvZGVCbG9jayh2bSwgZXhlYywgbWVtb3J5KTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwpOwotICAgICAgICBtX2NvZGVCbG9j
ay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Ci0gICAgfQotICAgIG1fbWVtb3J5LnNldCh2bSwg
dGhpcywgbWVtb3J5KTsKLX0KLQotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3Bh
Y2VPYmplY3QpCi17Ci0gICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5
IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5o
ZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0s
IHN0cnVjdHVyZSwgbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCkpOwotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwg
bW9kdWxlLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwotICAgIHJldHVybiBpbnN0YW5jZTsKLX0K
K2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNfaW5mbyA9IHsgIldlYkFz
c2VtYmx5Lkluc3RhbmNlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1dlYkFzc2VtYmx5SW5zdGFuY2UpIH07CiAKIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKQEAgLTc1LDExICs2MCwxMSBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUsCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiAKKyAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7
CiAgICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IG1vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgbV9nbG9iYWxz
ID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5U2l6ZSk7CiAgICAgaGVh
cCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9yeVNpemUpOwogCi0gICAg
bV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNvZGVCbG9jaygpKTsKICAgICBtX21v
ZHVsZU5hbWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7
CiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImV4cG9ydHMi
KSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBOb25lKTsKIH0KQEAgLTk1LDE2ICs4MCwyNzcgQEAg
dm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3RhYmxlKTsKICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2Jq
ZWN0LT5tb2R1bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25z
OyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCp0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlv
bihpKSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9u
cygpW2ldKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVk
Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OlBsYW4+IHBsYW4pCit7CisgICAgYXV0byogY29k
ZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBtb2R1bGUoKSwgbWVt
b3J5TW9kZSgpLCBXVEZNb3ZlKHBsYW4pLCBtb2R1bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5p
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSk7CisgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBj
b2RlQmxvY2spOworICAgIEFTU0VSVCghY29kZUJsb2NrLT5pbml0aWFsaXplZCgpKTsKK30KKwor
dm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGNvZGVCbG9jaygpLT5pbml0aWFsaXplKCk7CisKKyAgICBpZiAoIWNvZGVCbG9jaygp
LT5ydW5uYWJsZSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCBjb2RlQmxvY2soKS0+ZXJyb3JNZXNzYWdlKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2so
KS0+aXNTYWZlVG9SdW4obWVtb3J5KCkpKTsKKworICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGpz
Q2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LT5t
b2R1bGVSZWNvcmQoKSk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1vZHVsZSgpLCB0
aGlzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOworCisgICAgSlNWYWx1ZSBz
dGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXJ0UmVzdWx0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOworfQor
CitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNP
YmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKK3sKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisKKyAgICBjb25zdCBX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVsZS0+bW9k
dWxlSW5mb3JtYXRpb24oKTsKKworICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVjdCog
ZXJyb3IpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3Ip
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9OworCisgICAgLy8gSWYgdGhlIGxpc3Qg
b2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMg
bm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgorICAgIGlmIChtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQorICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQg
dGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRzIikpKTsKKworICAgIElkZW50
aWZpZXIgbW9kdWxlS2V5ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFtZShQcml2YXRl
TmFtZTo6RGVzY3JpcHRpb24sICJXZWJBc3NlbWJseUluc3RhbmNlIikpOworICAgIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3Ry
dWN0dXJlKCksIG1vZHVsZUtleSwgbW9kdWxlSW5mb3JtYXRpb24pOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2Uo
ZXhlYyk7CisgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3
ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgorICAgIGF1dG8qIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBh
bGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkg
SlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3Jt
YXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKKyAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFu
ZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQg
b2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxl
IG9iamVjdHMsIHJlc3BlY3RpdmVseS4KKyAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFs
bHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCisgICAgdW5zaWduZWQgbnVtSW1wb3J0
RnVuY3Rpb25zID0gMDsKKyAgICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsKKworICAg
IGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CisgICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9
IGZhbHNlOworICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgorICAg
IGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgeworICAgICAg
ICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGlt
cG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCisgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxl
VmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgaW1wb3J0Lm1vZHVsZSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIG51bGxwdHIpOworICAgICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRo
cm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7CisKKyAgICAg
ICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9u
YW1lKQorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0
TW9kdWxlVmFsdWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGltcG9ydC5maWVsZCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgICAgIHN3aXRjaCAo
aW1wb3J0LmtpbmQpIHsKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9u
OiB7CisgICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgorICAgICAg
ICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJBc3NlbWJs
eS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUi
KSkpOworCisgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3Qq
Pih2YWx1ZSk7CisgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBGdW5jdGlv
biBFeG90aWMgT2JqZWN0OgorICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1
bmN0aW9uOworICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFw
cGVyRnVuY3Rpb247CisgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2
bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2ggdGhl
IHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAg
ICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4OworICAg
ICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIGltcG9y
dGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJl
SW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgorICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1bmN0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4
cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNp
Z25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGlt
cG9ydGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGRv
ZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJl
IikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgorICAg
ICAgICAgICAgLy8gYS4gTGV0IGNsb3N1cmUgYmUgYSBuZXcgaG9zdCBmdW5jdGlvbiBvZiB0aGUg
Z2l2ZW4gc2lnbmF0dXJlIHdoaWNoIGNhbGxzIHYgYnkgY29lcmNpbmcgV2ViQXNzZW1ibHkgYXJn
dW1lbnRzIHRvIEphdmFTY3JpcHQgYXJndW1lbnRzIHZpYSBUb0pTVmFsdWUgYW5kIHJldHVybnMg
dGhlIHJlc3VsdCwgaWYgYW55LCBieSBjb2VyY2luZyB2aWEgVG9XZWJBc3NlbWJseVZhbHVlLgor
ICAgICAgICAgICAgLy8gTm90ZTogZG9uZSBhcyBwYXJ0IG9mIFBsYW4gY29tcGlsYXRpb24uCisg
ICAgICAgICAgICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3MuCisgICAgICAgICAgICAvLyBOb3Rl
OiBhZGRpbmcgdGhlIEpTQ2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJl
IHJlcXVpcmVtZW50cyBiLiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBr
ZXB0IGFsaXZlKSBhbmQgdi4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KKworICAgICAgICAgICAg
QVNTRVJUKG51bUltcG9ydEZ1bmN0aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKKyAgICAgICAg
ICAgIGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbnMoKVtudW1JbXBvcnRGdW5jdGlvbnMrK10uc2V0
KHZtLCBpbnN0YW5jZSwgZnVuY3Rpb24pOworICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1
cmUgdG8gaW1wb3J0cy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZh
bGlkYXRpb24gZmFpbHVyZS4KKyAgICAgICAgICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRh
YmxlIGltcG9ydCk6CisgICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRydWU7CisgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2Vt
Ymx5VGFibGUqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBX
ZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgor
ICAgICAgICAgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFi
bGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7CisK
KyAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOworICAgICAgICAgICAgdWludDMyX3QgYWN0dWFs
SW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7CisgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8
IGV4cGVjdGVkSW5pdGlhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1w
b3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7CisKKyAgICAg
ICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBleHBlY3RlZE1heGltdW0gPSBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgeworICAgICAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11
bSgpOworICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMs
IHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0n
IGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4aW11bSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMs
IHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0
aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgorICAgICAgICAgICAgLy8g
aWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KKyAgICAgICAgICAgIGluc3RhbmNl
LT5tX3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKKyAg
ICAgICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRl
ZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCht
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOworICAgICAgICAgICAgaGFzTWVtb3J5SW1wb3J0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1p
Y0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAvLyBp
LiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRocm93IGEgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFz
c2VtYmx5Lk1lbW9yeSIpKSk7CisKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBleHBlY3Rl
ZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOworICAgICAgICAg
ICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbEluaXRpYWwgPSBtZW1vcnktPm1lbW9yeSgpLmluaXRp
YWwoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQor
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdp
bml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7CisKKyAgICAgICAgICAgIGlmIChXYXNtOjpQ
YWdlQ291bnQgZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGlt
dW0oKSkgeworICAgICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0g
bWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxN
YXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBk
aWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBk
b2VzIikpKTsKKworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhpbXVtID4gZXhwZWN0ZWRN
YXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMg
J21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSci
KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVt
b3JpZXMuCisgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0
cy4KKyAgICAgICAgICAgIEFTU0VSVCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKKyAgICAgICAgICAg
IGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9i
YWw6IHsKKyAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgorICAgICAg
ICAgICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBl
RXJyb3IuCisgICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBv
cnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKKyAg
ICAgICAgICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBpcyBpNjQgb3IgVHlwZSh2
KSBpcyBub3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAg
ICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUg
PT0gV2FzbTo6STY0KQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9i
YWwgY2Fubm90IGJlIGFuIGk2NCIpKSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJl
IGEgbnVtYmVyIikpKTsKKyAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIFRvV2ViQXNzZW1ibHlW
YWx1ZSh2KSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMg
PT0gaW1wb3J0LmtpbmRJbmRleCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgeworICAgICAgICAgICAgY2FzZSBX
YXNtOjpJMzI6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRH
bG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUu
dG9GbG9hdChleGVjKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBv
cnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIGlmICghIW1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBv
cnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGlt
cG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgp
KTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkg
ZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdh
c206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgp
LCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGlmICgh
bWVtb3J5KQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihleGVjKSk7CisKKyAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0s
IGluc3RhbmNlLAorICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVy
ZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK
KyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpIHsKKyAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzVGFi
bGVJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkp
OworICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdzIGEgVGFibGUgZGVm
aW5pdGlvbi4KKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBKU1dlYkFz
c2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksCisgICAgICAgICAgICAgICAgbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVk
LgorICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hv
dWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KKyAgICAgICAgICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQodGFibGUpOworICAg
ICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgpKSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20gLT4g
d2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlp
bmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCisgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5z
ZXQodm0sIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRS
ZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBHbG9iYWxz
CisgICAgeworICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1h
dGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsKKyAgICAgICAgZm9yIChzaXplX3QgZ2xvYmFsSW5k
ZXggPSBudW1JbXBvcnRHbG9iYWxzOyBnbG9iYWxJbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHMuc2l6ZSgpOyArK2dsb2JhbEluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBn
bG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2dsb2JhbEluZGV4XTsKKyAgICAgICAg
ICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJ
bXBvcnQpOworICAgICAgICAgICAgaWYgKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2Fz
bTo6R2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGds
b2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7CisgICAg
ICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxv
YWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5k
ZXgsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEFTU0VSVCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsKKyAgICBpbnN0YW5jZS0+bV9j
b2RlQmxvY2suc2V0TWF5QmVOdWxsKHZtLCBpbnN0YW5jZSwganNNb2R1bGUtPmNvZGVCbG9jayhp
bnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLWNv
bnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNfaW5mbyA9IHsgIldlYkFzc2Vt
Ymx5Lkluc3RhbmNlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5SW5zdGFuY2UpIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmlu
ZGV4IGUyMjg0OTY5NjcyMDVhMzEzNmM4ODNiYmRlMzI2YWRiYzcxMTEzMGQuLmVjOWJjOGU4MTQw
NzJiN2VlMjVlOTJiOWI0OWUxMDg0NmFiZmQ1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC0zOCw1MSArMzgs
MzQgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDsKIGNs
YXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47
Cit9CisKKwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJh
c2U7CiAKLQotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCop
OworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0
ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jayk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+bW9kdWxlKCk7Ci0gICAgfQorICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLmdldCgpOyB9CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGNv
ZGVCbG9jaygpICYmIGNvZGVCbG9jaygpLT5pbml0aWFsaXplZCgpOyB9CisgICAgdm9pZCBhZGRV
bml0aWFsaXplZENvZGVCbG9jayhWTSYsIFJlZjxXYXNtOjpQbGFuPik7CisgICAgdm9pZCBmaW5h
bGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKik7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKiBjb2RlQmxvY2soKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOwotICAgIH0KKyAgICBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQog
Ci0gICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlv
bnMpOwotICAgICAgICByZXR1cm4gJmltcG9ydEZ1bmN0aW9ucygpW2lkeF07Ci0gICAgfQotCi0g
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+KGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldEltcG9ydEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHZhbHVlLCB1bnNp
Z25lZCBpZHgpCi0gICAgewotICAgICAgICBpbXBvcnRGdW5jdGlvbihpZHgpLT5zZXQodm0sIHRo
aXMsIHZhbHVlKTsKLSAgICB9CisgICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVk
IGlkeCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVy
biBpbXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQotICAgIC8vIENhbGxpbmcg
dGhpcyBtaWdodCB0cmlnZ2VyIGEgcmVjb21waWxlLgotICAgIHZvaWQgc2V0TWVtb3J5KFZNJiwg
RXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIHZvaWQgc2V0TWVtb3J5KFZN
JiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1f
bWVtb3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1v
cnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCiAgICAgSlNX
ZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFRhYmxlKFZNJiB2bSwgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxl
LnNldCh2bSwgdGhpcywgdGFibGUpOyB9CiAKICAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CiAgICAgaW50NjRf
dCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQo
KVtpXTsgfQpAQCAtOTAsMTEgKzczLDYgQEAgcHVibGljOgogICAgIGRvdWJsZSBsb2FkRjY0R2xv
YmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJ
NjRHbG9iYWwoaSkpOyB9CiAgICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBi
aXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KIAotICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICByZXR1
cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxs
PikgKiBpZHg7Ci0gICAgfQotCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdGFibGUpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CkBAIC0xMTMsNiArOTEsOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGlt
cG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25z
KCkpOyB9CisKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7
CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwog
ICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcAppbmRleCBmNDE0NjdmNGZhYWU5ZGFhMDgxNjc0ZTdmMjA1NzhkNGM1ZWI2ZjNj
Li5hMmNkMzQ2MTJhNmI5ZTRiMmM5ZDIxMWVmZDg0MDlhMDQ2ODA1ZDc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApA
QCAtNDIsMzUgKzQyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TW9kdWxl
KSB9OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWls
ZENvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6UGxhbiYgcGxhbiwgc3Rk
OjpvcHRpb25hbDxXYXNtOjpNZW1vcnlNb2RlPiBtb2RlKQorSlNXZWJBc3NlbWJseU1vZHVsZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UsIFJlZlB0
cjxXYXNtOjpQbGFuPiYmIHBsYW4pCiB7CisgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBPbiBmYWls
dXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgotICAgIHBsYW4u
cnVuKG1vZGUpOwotICAgIGlmIChwbGFuLmZhaWxlZCgpKSB7Ci0gICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKGV4ZWMsIHZt
LCBwbGFuLmVycm9yTWVzc2FnZSgpKSk7CisgICAgaWYgKHBsYW4tPmZhaWxlZCgpKSB7CisgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
OjpjcmVhdGUoZXhlYywgdm0sIHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
Q29tcGlsZUVycm9yU3RydWN0dXJlKCksIHBsYW4tPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBpZiAobW9kZSkKLSAgICAgICAgQVNTRVJUKCpt
b2RlID09IHBsYW4ubW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50ID0gcGxhbi5p
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIHRoaXMsIHBsYW4udGFrZUNhbGxMaW5rSW5mb3MoKSwg
cGxhbi50YWtlV2FzbUV4aXRTdHVicygpLCBwbGFuLm1vZGUoKSwgY2FsbGVlQ291bnQpOwotCi0g
ICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3Qo
KSwKLSAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxl
ZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dENhbGxlZSkgewotICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKU0VudHJ5cG9pbnRDYWxsZWUo
dm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICAgICAgY29kZUJs
b2NrLT5zZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBv
aW50Q2FsbGVlKTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuIGNvZGVCbG9jazsKLX0KLQotSlNX
ZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDhfdCogc291cmNlLCBzaXpl
X3QgYnl0ZVNpemUpCi17Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVs
ZSh2bSwgc3RydWN0dXJlKTsKIAotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhl
Yywgc291cmNlLCBieXRlU2l6ZSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGF1dG8qIG1v
ZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoc291cmNl
KSk7CisgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShwbGFuKSk7CisgICAg
cmV0dXJuIG1vZHVsZTsKIH0KIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKQEAgLTc4LDYxICs2MSw0MCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNX
ZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNlKQog
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9zb3VyY2VCdWZmZXIoc291cmNlLnJl
bGVhc2VOb25OdWxsKCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseU1lbW9yeSogbWVtb3J5KQotewotICAgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSA9IG1lbW9y
eS0+bWVtb3J5KCkubW9kZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdhc206
Ok51bWJlck9mTWVtb3J5TW9kZXM7ICsraSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2tzW2ld
ICYmIG1fY29kZUJsb2Nrc1tpXS0+aXNTYWZlVG9SdW4obWVtb3J5KSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9ja3NbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjb2RlQmxv
Y2tGb3IobW9kZSkpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29kZSBibG9jayBmb3IgdGhpcyBtb2RlLCB3ZSBuZWVk
IHRvIHJlY29tcGlsZS4uLgotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihtX3NvdXJjZUJ1ZmZlci0+ZGF0YSgpKSwgbV9zb3VyY2VCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7Ci0KLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywg
cGxhbiwgbW9kZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0K
LSAgICBBU1NFUlQocGxhbi5leHBvcnRzKCkuc2l6ZSgpID09IG1fZXhwb3J0U3ltYm9sVGFibGUt
PnNpemUoKSk7Ci0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgZm9yIChhdXRv
JiBleHAgOiBwbGFuLmV4cG9ydHMoKSkKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwLCBt
X2V4cG9ydFN5bWJvbFRhYmxlLT5jb250YWlucyhleHAuZmllbGQuaW1wbCgpKSk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkpOwotICAgIGNvZGVCbG9ja0Zv
cihtb2RlKS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIGNvZGVCbG9jazsK
LX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpCit2b2lkIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFdhc206OlBs
YW4+JiYgcGxhbikKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzb3VyY2UsIGJ5dGVTaXplKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9y
bWF0aW9uID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgZm9yIChhdXRvJiBl
eHAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0cykgeworICAgICAgICBBU1NFUlQoZXhwLmZp
ZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAgZXhwLmZpZWxkID0g
QXRvbWljU3RyaW5nKGV4cC5maWVsZCk7CisgICAgfQorICAgIGZvciAoYXV0byYgaW1wIDogbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydHMpIHsKKyAgICAgICAgQVNTRVJUKGltcC5maWVsZC5pc1Nh
ZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7CisgICAgICAgIGltcC5maWVsZCA9IEF0b21pY1N0
cmluZyhpbXAuZmllbGQpOworICAgICAgICBBU1NFUlQoaW1wLm1vZHVsZS5pc1NhZmVUb1NlbmRU
b0Fub3RoZXJUaHJlYWQoKSk7CisgICAgICAgIGltcC5tb2R1bGUgPSBBdG9taWNTdHJpbmcoaW1w
Lm1vZHVsZSk7CisgICAgfQogCi0gICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2so
dm0sIGV4ZWMsIHBsYW4pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKKyAgICBt
X21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbik7CiAKICAgICAv
LyBPbiBzdWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVk
IHdpdGggW1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgogICAgIFN5
bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwot
ICAgIGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpIHsKKyAgICBmb3IgKGF1dG8mIGV4
cCA6IG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHMpIHsKICAgICAgICAgYXV0byBvZmZzZXQg
PSBleHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3Nh
cnkpOwotICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwg
ZXhwLmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwor
ICAgICAgICBBU1NFUlQoZXhwLmZpZWxkLmltcGwoKS0+aXNBdG9taWMoKSk7CisgICAgICAgIGV4
cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBzdGF0aWNfY2FzdDxBdG9t
aWNTdHJpbmdJbXBsKj4oZXhwLmZpZWxkLmltcGwoKSksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zm
c2V0KG9mZnNldCkpKTsKICAgICB9CiAKLSAgICBtX3NvdXJjZUJ1ZmZlciA9IEFycmF5QnVmZmVy
OjpjcmVhdGUoc291cmNlLCBieXRlU2l6ZSk7Ci0gICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IHBs
YW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgbV9leHBvcnRTeW1ib2xUYWJsZS5zZXQo
dm0sIHRoaXMsIGV4cG9ydFN5bWJvbFRhYmxlKTsKLSAgICBjb2RlQmxvY2tGb3IoY29kZUJsb2Nr
LT5tb2RlKCkpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCAzODllNjNhMzM1YzFj
MTE3YjY5NzY5NzEwYzYzYmQ3ZjgzNGU4NmU0Li5hNDE3ODg0ZGQ1MTE5M2NiZDBhNmM2MmNkNjY5
MWQzMThmNGFlMGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC00OCwzNSArNDgsMzIgQEAgY2xhc3MgSlNXZWJBc3Nl
bWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVpbnQ4X3Qq
IHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVs
ZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1
ZmZlcj4mJiBzb3VyY2UsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgREVDTEFSRV9JTkZPOwogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCk7IH0KLSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IHJl
dHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkudGFrZVJlc2VydmVkTWVtb3J5KCk7IH0K
ICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4
cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKICAg
ICB9CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBtb2R1bGUgd2Fz
IG9yaWdpbmFsbHkgY29tcGlsZWQgZXhwZWN0aW5nIHRvIHVzZS4gVGhpcyB3b24ndCBuZWVkIHRv
IHJlY29tcGlsZS4KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBjb2RlQmxvY2tGb3IobV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKSkuZ2V0
KCk7IH0KLSAgICAvLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBjb2RlIGJsb2NrIGZvciB0aGUg
Z2l2ZW4gbWVtb3J5LCBwb3NzaWJseSB0cmlnZ2VyaW5nIGEgcmVjb21waWxlLgotICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1i
bHlNZW1vcnkqKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6
TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90
Pihtb2RlKV0uZ2V0KCk7IH0KKworICAgIEFycmF5QnVmZmVyJiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZUJ1ZmZlci5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKFdhc206Ok1lbW9yeU1vZGUg
bW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldOyB9
Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogYnVpbGRDb2RlQmxvY2soVk0mLCBFeGVjU3Rh
dGUqLCBXYXNtOjpQbGFuJiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnlNb2RlPiBtb2RlID0g
c3RkOjpudWxsb3B0KTsKKyAgICBmcmllbmQgY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jazsK
IAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0
ZVNpemUpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8
QXJyYXlCdWZmZXI+JiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWZQdHI8V2Fz
bTo6UGxhbj4mJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG1fc291cmNlQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKKyAgICBSZWY8QXJyYXlC
dWZmZXI+IG1fc291cmNlQnVmZmVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8
U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVz
XTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCBhYzMxODFiM2Y5ZGNl
ZTRlMTMzYjA4N2ZmNzFmNDkwMTVlNDg4ZDJkLi5jNzIyMGNjNGRmYzJhYTZkNDYyODY0MDk5YzFi
YzM1YTk2NDljZmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTM3LDYg
KzM3LDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIK
KyNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1
ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNl
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKQEAgLTQ1
LDggKzQ3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKLQogY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAmY29uc3RydWN0b3JU
YWJsZVdlYkFzc2VtYmx5SW5zdGFuY2UsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yKSB9OwogCiAvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5sdXQuaApAQCAtNTQsMjY5ICs1NCw1MiBAQCBjb25zdCBDbGFzc0luZm8g
V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZC
YXNlOjpzXwogIEBlbmQKICAqLwogCit1c2luZyBXYXNtOjpQbGFuOworCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEg
V2ViQXNzZW1ibHkuTW9kdWxlIGluc3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0gICAg
SlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghanNNb2R1bGUpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQg
dG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBk
ZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1lbnQo
MCkpKSkpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCFt
b2R1bGUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFyZ3Vt
ZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUi
KSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmFyZ3Vt
ZW50KDApKSkpKTsKIAogICAgIC8vIElmIHRoZSBpbXBvcnRPYmplY3QgcGFyYW1ldGVyIGlzIG5v
dCB1bmRlZmluZWQgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVF
cnJvciBpcyB0aHJvd24uCiAgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOwogICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRP
YmplY3QoKTsKICAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9y
dE9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJzZWNv
bmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3Ig
YW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShp
bXBvcnRBcmd1bWVudCkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
InNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5l
ZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7Ci0KLSAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2Uo
ZXhlYywganNNb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUpKTsKLX0KLQot
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNy
ZWF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1
bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUp
Ci17Ci0gICAgYXV0byYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKLQotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwotCi0g
ICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH07Ci0KLSAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBu
b3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJv
ciBpcyB0aHJvd24uCi0gICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYm
ICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBiZWNh
dXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxl
IHJlcXVpcmVzIGltcG9ydHMiKSkpOwotCi0gICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldl
YkFzc2VtYmx5SW5zdGFuY2UiKSk7Ci0gICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVs
ZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBt
b2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKLQotCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUs
IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgLy8gTGV0IGZ1bmNzLCBtZW1v
cmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZh
U2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJs
eS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCi0gICAgLy8gTGV0IGltcG9ydHMgYmUgYW4g
aW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgotICAgIHVuc2lnbmVkIG51
bUltcG9ydEZ1bmN0aW9ucyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtSW1wb3J0R2xvYmFscyA9IDA7
Ci0KLSAgICBib29sIGhhc01lbW9yeUltcG9ydCA9IGZhbHNlOwotICAgIGJvb2wgaGFzVGFibGVJ
bXBvcnQgPSBmYWxzZTsKLSAgICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0
czoKLSAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsK
LSAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5n
IEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25hbWUpLgotICAgICAgICBKU1ZhbHVlIGltcG9y
dE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0gICAgICAg
IC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAg
ICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11
c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKLQotICAgICAgICAvLyAzLiBMZXQgdiBiZSB0aGUg
dmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCi0gICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7Ci0gICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgICAgIHN3
aXRjaCAoaW1wb3J0LmtpbmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1
bmN0aW9uOiB7Ci0gICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0Ogot
ICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJB
c3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2Fs
bGFibGUiKSkpOwotCi0gICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNP
YmplY3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBG
dW5jdGlvbiBFeG90aWMgT2JqZWN0OgotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiog
d2FzbUZ1bmN0aW9uOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdh
c21XcmFwcGVyRnVuY3Rpb247Ci0gICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5j
dGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsK
LSAgICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0
Y2ggdGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAg
ICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4
OwotICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAg
IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2ln
bmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwotICAg
ICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgotICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1bmN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUlu
ZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5j
dGlvblNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKGltcG9ydGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGZ1bmN0aW9uJ3Mgc2lnbmF0
dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1bmN0aW9uJ3Mgc2ln
bmF0dXJlIikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNl
OgotICAgICAgICAgICAgLy8gYS4gTGV0IGNsb3N1cmUgYmUgYSBuZXcgaG9zdCBmdW5jdGlvbiBv
ZiB0aGUgZ2l2ZW4gc2lnbmF0dXJlIHdoaWNoIGNhbGxzIHYgYnkgY29lcmNpbmcgV2ViQXNzZW1i
bHkgYXJndW1lbnRzIHRvIEphdmFTY3JpcHQgYXJndW1lbnRzIHZpYSBUb0pTVmFsdWUgYW5kIHJl
dHVybnMgdGhlIHJlc3VsdCwgaWYgYW55LCBieSBjb2VyY2luZyB2aWEgVG9XZWJBc3NlbWJseVZh
bHVlLgotICAgICAgICAgICAgLy8gTm90ZTogZG9uZSBhcyBwYXJ0IG9mIFBsYW4gY29tcGlsYXRp
b24uCi0gICAgICAgICAgICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3MuCi0gICAgICAgICAgICAv
LyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBj
bG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdp
bCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KLQotICAgICAg
ICAgICAgQVNTRVJUKG51bUltcG9ydEZ1bmN0aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRJbXBvcnRGdW5jdGlvbih2bSwgZnVuY3Rpb24sIG51bUlt
cG9ydEZ1bmN0aW9ucysrKTsKLSAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGlt
cG9ydHMuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNU
YWJsZUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9u
IGZhaWx1cmUuCi0gICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBv
cnQpOgotICAgICAgICAgICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxl
Kj4odm0sIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1i
bHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAg
ICAgIGlmICghdGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9y
dCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOwotCi0gICAgICAg
ICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUlu
Zm9ybWF0aW9uLmluaXRpYWwoKTsKLSAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwg
PSB0YWJsZS0+c2l6ZSgpOwotICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3Rl
ZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92
aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBp
ZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3Jt
YXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhl
IG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotICAgICAgICAgICAgICAgIGlmICgq
YWN0dWFsTWF4aW11bSA+ICpleHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUg
bW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBw
ZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFi
bGUodm0sIHRhYmxlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIDYuIElmIGkg
aXMgYSBtZW1vcnkgaW1wb3J0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9y
eUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZh
aWx1cmUuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1v
cnkpOwotICAgICAgICAgICAgaGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1l
bW9yeSo+KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFz
c2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAg
ICAgICAgICAgaWYgKCFtZW1vcnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9y
eSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7Ci0K
LSAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOwotICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFj
dHVhbEluaXRpYWwgPSBtZW1vcnktPm1lbW9yeSgpLmluaXRpYWwoKTsKLSAgICAgICAgICAgIGlm
IChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQotICAgICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlM
aXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBz
bWFsbCIpKSk7Ci0KLSAgICAgICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRNYXhp
bXVtID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSkgewotICAgICAgICAgICAg
ICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhp
bXVtKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11
bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChhY3R1YWxNYXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0
aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCi0gICAgICAgICAgICAv
LyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIG1lbW9yeSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewotICAgICAg
ICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJ
ZiBpIGlzIG5vdCBhbiBpbW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAg
ICAgICAgIEFTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhd
Lm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOwotICAgICAgICAgICAgLy8g
aWkuIElmIHRoZSBnbG9iYWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1i
ZXIsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKG1vZHVs
ZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUg
YW4gaTY0IikpKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkp
OwotICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGlt
cG9ydHMuCi0gICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2lu
ZEluZGV4KTsKLSAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tp
bXBvcnQua2luZEluZGV4XS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAg
ICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFs
dWUudG9JbnQzMihleGVjKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUlt
cG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMp
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkY2NDoK
LSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHsKLSAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7Ci0gICAg
ICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNo
b3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChoYXNNZW1vcnlJbXBvcnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwotICAgICAgICAg
ICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgot
ICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5OwotICAgICAgICAgICAgaWYg
KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5oYXNSZXNlcnZlZE1lbW9yeSgpKQotICAgICAgICAg
ICAgICAgIG1lbW9yeSA9IGpzTW9kdWxlLT50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRl
KHZtLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkubWF4aW11bSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0s
IGV4ZWMsCi0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCks
IG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0
YW5jZVN0cnVjdHVyZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBjYXNlczoKKyAgICAvLyAxKSBUaGUgaW5z
dGFuY2UgYWxyZWFkeSBoYXMgYW4gaW5pdGlhbGl6ZWQgQ29kZUJsb2NrIChydW5uYWJsZSksIHNv
IHdlIGp1c3QgbmVlZCB0byBmaW5hbGl6ZUNyZWF0aW9uLgorICAgIC8vIDIpIFRoZSBpbnN0YW5j
ZSBoYXMgbm8gQ29kZUJsb2NrLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugb25lIGFuZCBjb21waWxlIHRo
ZSBjb2RlIGZvciBpdC4KKyAgICAvLyAzKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gdW5p
bml0aWFsaXplZCBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbXBpbGF0
aW9uIHRvIGZpbmlzaC4KKworICAgIGlmICghaW5zdGFuY2UtPmluaXRpYWxpemVkKCkpIHsKKyAg
ICAgICAgaWYgKGluc3RhbmNlLT5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIFdhc206OmVuc3Vy
ZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShpbnN0YW5jZS0+Y29kZUJsb2Nr
KCktPnBsYW4oKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmVmPFdhc206OlBsYW4+
IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1vZHVsZS0+c291cmNlKCksIFBsYW46OkZ1
bGxDb21waWxlLCBQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICAgICAgICAgIHBsYW4tPnNldE1v
ZGUoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+YWRkVW5p
dGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsKKworICAgICAgICAgICAgYXV0
byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOworICAgICAgICAgICAgd29ya2xp
c3QuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5jb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4uZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
ewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNU
YWJsZUltcG9ydCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQo
KSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFs
d2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmlu
ZWQuCi0gICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBz
aG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJU
KCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAot
ICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1
cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2
b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5u
ZWQgcmVnaXN0ZXJzLgotICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5
KCkpKSkpOwotICAgIH0KLQotICAgIC8vIEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChu
dW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwp
OwotICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGds
b2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5k
ZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9u
Lmdsb2JhbHNbZ2xvYmFsSW5kZXhdOwotICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFs
aXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAo
Z2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBv
cnQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnRO
dW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0
R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlh
bEJpdHNPckltcG9ydE51bWJlcikpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJ
bXBvcnROdW1iZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5r
KGV4ZWMsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwotCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgp
OwotICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMp
OwotICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBpbnN0
YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0K
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4
IDU5NzA5ZjUxNzU2ZGM1NWVhMmJkMjc4NjYzNTA1ZTllMzkzN2YwMTMuLjM1OTk2MjJmMmNhMjQ5
YjFlMWQ4MTIwY2EzNjNhZDYxNGU1YTZlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
CkBAIC03NSwxMyArNzUsMTMgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
OjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmYKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIHNpemVfdCBieXRlT2Zmc2V0OwotICAgIHNpemVfdCBieXRlU2l6ZTsKLSAgICB1aW50
OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBidWZmZXIsIGJ5dGVPZmZz
ZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNv
dXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIGV4ZWMsIHN0cnVjdHVyZSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQdHI8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0
UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCAqc291cmNlLCBXYXNtOjpQbGFuOjpWYWxpZGF0aW9uLCBX
YXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBpZiAoIXBsYW4tPnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+
ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
U3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikp
OwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXgg
ZmZmZWU1YzEwZjU5ZjgxZjFiYmUzY2YxZDU0NzdjZjkwYzY4N2Y3MC4uZmI1NjFkOWRkYjg3ZTc0
MDcyOWE2MjliNTE4NjE3MDU0OTE2YmExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtNzMsOCAr
NzMsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFdhc20KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLCB2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpCi0gICAgICAg
IGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5m
aWVsZCkpOworICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhw
b3J0cykgeworICAgICAgICBJZGVudGlmaWVyIGZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIGV4cC5maWVsZCk7CisgICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5Ojpj
cmVhdGVMb2NhbChmaWVsZCwgZmllbGQpKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKQEAgLTg1LDE0ICs4NywxMyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdGFydEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UpCit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29w
ZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gaW5zdGFuY2UtPm1vZHVsZSgp
OwogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2Rl
QmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKQEAgLTExMiw3ICsxMTMsNyBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0
IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMg
dW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlz
dC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFu
IEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0
aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpT
IGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAg
aWYgKGV4cC5raW5kSW5kZXggPCBmdW5jdGlvbkltcG9ydENvdW50KSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IGV4cC5raW5kSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1
bmN0aW9uSW5kZXgpLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25J
bXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0
KSkKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0Owog
ICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTI4LDcgKzEyOSw3IEBAIHZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhCiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206
OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgm
dm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5j
ZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdh
c21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhw
b3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNzksNyArMTgwLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgYm9v
bCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBmYWxzZTsKICAgICAgICAgYm9vbCBpZ25vcmVS
ZWFkT25seUVycm9ycyA9IHRydWU7CiAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50
LCBleGVjLCBleHAuZmllbGQsIGV4cG9ydGVkVmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJv
ciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxl
UHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgZXhwLmZpZWxkKSwgZXhwb3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dS
ZWFkT25seUVycm9yLCBpZ25vcmVSZWFkT25seUVycm9ycywgcHV0UmVzdWx0KTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0KTsKICAgICB9CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdh
c206OlZvaWQpOwogICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxv
Y2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0
RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2UpLT5nZXQoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFu
Y2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAg
IG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKQEAgLTI1MSw3ICsyNTIsNyBAQCBKU1ZhbHVlIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2Vz
W2ldOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25J
bmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1
bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVu
Y3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlv
bihmdW5jdGlvbkluZGV4KS0+Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCog
ZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5j
dGlvbihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmgKaW5kZXggNWRjZWI0MmQ4ZjhjMjA2OTgyOTRiYWEwYzZiYmNmNDliOGRjZDQzZC4uMmI4Mzcy
ZTdjN2MzMzk0NzhlOWJlNzY1MTc3ZWI4NTI0MTZkNDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCkBAIC0z
Myw2ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rp
b247CiAKIC8vIEJhc2VkIG9uIHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBzcGVjaWZpY2F0aW9u
CkBAIC00Nyw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZCogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAg
ICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgdm9p
ZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwppbmRleCA0NWY5ZDlhYzFiMWZiYmNkNWNiOTFkN2ZhZWJlNDg5ZWQwNWI0OGY4
Li4yODdjNWI5YTJjMjk0NThmZTNkOWJiYmRmMGYyNWI5ZGU4N2Q1YjljIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBA
CisyMDE3LTAzLTI2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlL2NvbXBpbGUg
dHJ1bHkgYXN5bmNocm9ub3VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjkxODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHdhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzOgorICAgICAgICAoYXN5
bmMudGVzdFByb21pc2VBUEkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1j
b21waWxlLXBhcmFsbGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRocm93RXhuKToKKyAg
ICAgICAgKGFzeW5jLnRlc3QpOgorICAgICAgICAocC5jYXRjaCk6CisgICAgICAgICogd2FzbS9q
cy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVsLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzeW5jLnRlc3QpOgorICAgICAgICAocC5jYXRjaCk6CisgICAgICAgICogd2FzbS9qcy1h
cGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzOgorICAgICAgICAoYXNzZXJ0LmVxLmFzeW5j
LnRlc3QpOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKHRlc3QuYXN5bmMudGVzdCk6
CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzc2VydC50cnV0aHkuYXN5bmMudGVzdCk6IERl
bGV0ZWQuCisgICAgICAgIChhc3NlcnQudHJ1dGh5KTogRGVsZXRlZC4KKwogMjAxNy0wMy0yMyAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UganNOb250cml2aWFsU3RyaW5nIGFncmVzc2l2ZWx5IGZvciBUb1N0cmluZyhJbnQ1MikKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMgYi9KU1Rlc3Rz
L3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCmluZGV4IGYzNDNjNmU5M2M3MzEyNWU0OWFk
OTNmNGFhNzJhMWEwOWU2OWUyYmIuLjNkNGQyNzhiYjRkODU5NGY1MjU0MzNhOTI3OTRlMmMyZmZl
NDAwOWEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMK
KysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwpAQCAtMSw3ICsxLDgg
QEAKK2FzeW5jVGVzdCg0KTsKKwogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cyc7CiBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIAotbGV0IGRvbmUgPSBm
YWxzZTsKIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgIHsKICAgICAgICAg
Ly8gQ2FuJ3QgZGVjbGFyZSBtb3JlIHRoYW4gb25lIG1lbW9yeS4KQEAgLTE0LDM5ICsxNSwzMyBA
QCBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICAgICAgICAgIC5Db2RlKCkK
ICAgICAgICAgICAgIC5FbmQoKTsKIAotICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICB0
aHJldyA9IHRydWU7CiAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJB
c3NlbWJseS5Db21waWxlRXJyb3IpOwotICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3Nh
Z2UgPT09ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDM6
IE1lbW9yeSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5IChl
dmFsdWF0aW5nICdXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDM6IE1lbW9yeSBzZWN0aW9u
IGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CisgICAgICAgICAgICBh
c3luY1Rlc3RQYXNzZWQoKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3
KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICB0
cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgpOwogICAgICAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKICAgICAgICAgICAgIGFzc2Vy
dC50cnV0aHkoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcik7CiAgICAgICAgICAgICBhc3NlcnQuZXEo
ZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3Ig
YW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5LmNvbXBpbGUoKScpIik7Cisg
ICAgICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQu
dHJ1dGh5KHRocmV3KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNl
OwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgy
MCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAg
ICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAg
ICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5
QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29t
cGlsZSgyMCknKSIpOworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgICAgIH0K
LSAgICAgICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7CiAgICAgfQogCiAgICAgewpAQCAtNjAsMTEg
KzU1LDggQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAKICAgICAgICAgbGV0
IG1vZHVsZSA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKTsKICAgICAgICAgYXNzZXJ0LnRydXRoeShtb2R1bGUgaW5zdGFuY2VvZiBXZWJBc3Nl
bWJseS5Nb2R1bGUpOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9Ci0KLSAgICBk
b25lID0gdHJ1ZTsKIH0KIAogdGVzdFByb21pc2VBUEkoKTsKLWRyYWluTWljcm90YXNrcygpOwot
YXNzZXJ0LnRydXRoeShkb25lKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2Vi
LWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1h
c3NlbWJseS1jb21waWxlLXBhcmFsbGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNmEzNmZiZGRmZDUyMWMy
ZGQ5NWU2M2Y3YmVhYjQ1YTNiNGE4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL3dlYi1hc3NlbWJseS1jb21waWxlLXBhcmFsbGVsLmpzCkBAIC0wLDAgKzEsNjUgQEAK
K2FzeW5jVGVzdCgxKTsKKworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworYXN5bmMgZnVuY3Rpb24g
dGhyb3dFeG4oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2FzeW5jIGZ1bmN0aW9u
IHRlc3QoKSB7CisgICAgY29uc3QgbG9vcERlcHRoID0gMTA7CisgICAgY29uc3QgbnVtQ29tcGls
YXRpb25zID0gMTsKKyAgICBjb25zdCBudW1WYXJzID0gMzA7CisgICAgY29uc3QgcGFyYW1zID0g
W107CisgICAgcGFyYW1zLmxlbmd0aCA9IG51bVZhcnM7CisgICAgcGFyYW1zLmZpbGwoImkzMiIp
OworCisgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zLCByZXQ6ICJp
MzIiIH0pOworCisgICAgY29uc3QgbWFrZUxvb3AgPSAoYnVpbGRlciwgZGVwdGgpID0+IHsKKyAg
ICAgICAgaWYgKGRlcHRoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisKKyAg
ICAgICAgYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgICAgIC5Mb29wKCJpMzIiLCAoYikgPT4g
eworICAgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAg
ICAgICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEp
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIKKworICAgIH0KKworICAg
IGJ1aWxkZXIgPSBtYWtlTG9vcChidWlsZGVyLCBsb29wRGVwdGgpOworICAgIGJ1aWxkZXIgPSBi
dWlsZGVyLkVuZCgpLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpOworCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1
c2goV2ViQXNzZW1ibHkuY29tcGlsZShiaW4pKTsKKyAgICB9CisKKyAgICBhd2FpdCBQcm9taXNl
LmFsbChjb21waWxhdGlvbnMpOworfQorCitsZXQgcCA9IHRlc3QoKTsKK3AuY2F0Y2goKGUpID0+
IHsKKyAgICBwcmludCgiRmFpbGVkOiAiLCBlKTsKKyAgICBwcmludChlLnN0YWNrKTsKK30pOwor
cC50aGVuKCgpID0+IGFzeW5jVGVzdFBhc3NlZCgpKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVsLmpzIGIvSlNUZXN0cy93
YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUtcGFyYWxsZWwuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZGY1NzY0OTVjZjk0ODZmNWQ5OTBmN2Y5Mzc2NDM5ZmJjNzBiZDRhYQotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFs
bGVsLmpzCkBAIC0wLDAgKzEsODIgQEAKK2FzeW5jVGVzdCgxKTsKKworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJzsKKworYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBjb25zdCBsb29wRGVwdGggPSAx
MDA7CisgICAgY29uc3QgbnVtQ29tcGlsYXRpb25zID0gMTsKKyAgICBjb25zdCBudW1WYXJzID0g
MzA7CisgICAgY29uc3QgcGFyYW1zID0gW107CisgICAgcGFyYW1zLmxlbmd0aCA9IG51bVZhcnM7
CisgICAgcGFyYW1zLmZpbGwoImkzMiIpOworCisgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxk
ZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7IGluaXRpYWw6IDAgfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zLCByZXQ6ICJpMzIiIH0pOworCisgICAg
Y29uc3QgbWFrZUxvb3AgPSAoYnVpbGRlciwgZGVwdGgpID0+IHsKKyAgICAgICAgaWYgKGRlcHRo
ID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisKKyAgICAgICAgYnVpbGRlciA9
IGJ1aWxkZXIKKyAgICAgICAgICAgIC5Mb29wKCJpMzIiLCAoYikgPT4geworICAgICAgICAgICAg
ICAgIGIuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAg
ICAgICAgICAgICAgICAgIC5JMzJTdWIoKQorICAgICAgICAgICAgICAgICAgICAuVGVlTG9jYWwo
MCkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAuQnJJZigxKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlTG9vcChiLCBkZXB0aCAtIDEpLkJyKDApOworICAgICAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiBidWlsZGVyOworICAgIH0KKworICAgIGJ1aWxkZXIgPSBtYWtlTG9v
cChidWlsZGVyLCBsb29wRGVwdGgpOworICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpLkVuZCgp
OworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAwIH0pOworICAg
IGNvbnN0IGltcG9ydE9iamVjdCA9IHsgImltcCI6IHsgIm1lbW9yeSI6IG1lbW9yeSB9IH07CisK
KyAgICAvLyBDb21waWxlIGEgYnVuY2ggb2YgaW5zdGFuY2VzIGluIHBhcmFsbGVsLgorICAgIGxl
dCBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNvbXBpbGF0
aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3Rh
bnRpYXRlKGJpbiwgaW1wb3J0T2JqZWN0KSk7CisgICAgfQorCisgICAgbGV0IFtpbnN0XSA9IGF3
YWl0IFByb21pc2UuYWxsKGNvbXBpbGF0aW9ucyk7CisgICAgbGV0IG1vZHVsZSA9IGluc3QubW9k
dWxlOworCisgICAgLy8gQ29tcGlsZSBhIGJ1bmNoIG9mIGluc3RhbmNlcyBmcm9tIG1vZHVsZXMg
aW4gcGFyYWxsZWwuCisgICAgY29tcGlsYXRpb25zID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBudW1Db21waWxhdGlvbnM7ICsraSkgeworICAgICAgICBjb21waWxhdGlvbnMucHVzaChX
ZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUsIGltcG9ydE9iamVjdCkpOworICAgIH0KKwor
ICAgIGF3YWl0IFByb21pc2UuYWxsKGNvbXBpbGF0aW9ucyk7CisKKyAgICAvLyBDb21waWxlIGFu
IGluc3RhbmNlIGZyb20gYSBtb2R1bGUgaW4gcGFyYWxsZWwsIGhhdmUgc3luYyBjb21waWxhdGlv
biBzdGVhbCBpdC4KKyAgICBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBjb21waWxhdGlvbnMucHVz
aChXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUsIGltcG9ydE9iamVjdCkpOworICAgIGlu
c3QgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBpbXBvcnRPYmplY3QpOworCisg
ICAgYXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKK30KKworbGV0IHAgPSB0ZXN0KCk7
CitwLmNhdGNoKChlKSA9PiB7CisgICAgcHJpbnQoIkZhaWxlZDogIiwgZSk7CisgICAgcHJpbnQo
ZS5zdGFjayk7Cit9KTsKK3AudGhlbigoKSA9PiBhc3luY1Rlc3RQYXNzZWQoKSk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCmluZGV4IGE5M2Jj
NjA1ZmYxN2RkZWU4MDFmN2E3NTMzNDE4NmE4NjFkNDQyYWQuLjcyZmM0N2UyNTJkZDc0NGJjZjIw
ODVhOTRmMTZiZmFiYzUwYTBjNDAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2Vi
LWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFz
c2VtYmx5LWluc3RhbnRpYXRlLmpzCkBAIC0xLDMgKzEsNSBAQAorYXN5bmNUZXN0KDcpOworCiBp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIGltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnOwogCkBAIC0xOSwxOCArMjEsMTUgQEAgYXNzZXJ0LmVxKFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5j
IGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2Fp
dCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1v
ZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGFzc2VydC50cnV0
aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5jZSk7CiAgICAgICAgIGFz
c2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCksIDEpOwotICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgfQogCi0gICAgdGVzdCgpOwotICAg
IGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7CisgICB0ZXN0KCk7
CiB9CiAKIHsKQEAgLTQ4LDE5ICs0NywxNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFu
dGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVz
dCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0g
PSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpOwogICAgICAgICB9IGNh
dGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJzZWNvbmQgYXJndW1l
bnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2Jq
ZWN0IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpJykiKTsK
ICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2Vk
KCk7CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFz
c2VydC50cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTc4LDIwICs3NCwxNyBAQCBhc3NlcnQuZXEo
V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAg
YXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7
bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwog
ICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5j
ZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5t
ZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6IGNvbnRyb2wgZmxv
dyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChl
dmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pJykiKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCB2YWxpZGF0
ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUsIGluIGZ1bmN0aW9u
IGF0IGluZGV4IDAiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAg
YXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90
YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTExMCwxOSArMTAz
LDE2IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRv
bmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewog
ICAgICAgICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSk7CiAgICAgICAgIH0gY2F0Y2goZSkg
ewotICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90
IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSAoZXZhbHVhdGluZyAnV2ViQXNzZW1i
bHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KScpIik7CisgICAgICAgICAg
ICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuTWVtb3J5Iik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBk
cmFpbk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC0x
NDEsMjAgKzEzMSwxNyBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3Ro
LCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAot
ICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSk7CiAgICAgICAgIH0gY2F0Y2goZSkg
ewotICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90
IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSAoZXZhbHVhdGluZyAnV2ViQXNzZW1i
bHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KScpIik7CisgICAgICAgICAg
ICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuTWVtb3J5Iik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBk
cmFpbk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC0x
NzIsMTggKzE1OSwxNSBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3Ro
LCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAot
ICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAg
ICAgbGV0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKICAgICAgICAgbGV0
IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlKTsKICAgICAg
ICAgYXNzZXJ0LnRydXRoeShpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNl
KTsKICAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDIwKSwgMSk7Ci0gICAg
ICAgIGRvbmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAg
ICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25l
KTsKIH0KIAogewpAQCAtMjAyLDcgKzE4Niw2IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0
YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0
ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuaW5z
dGFudGlhdGUoMjUpOwpAQCAtMjEwLDEwICsxOTMsOCBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHku
aW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBCZXR0ZXIgZXJy
b3IgbWVzc2FnZSBoZXJlLgogICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgImZpcnN0
IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlCdWZmZXJWaWV3IG9yIGFuIEFycmF5QnVmZmVyIChl
dmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSknKSIpOwogICAgICAgICB9Ci0g
ICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAK
ICAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShk
b25lKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305449</attachid>
            <date>2017-03-27 00:00:38 -0700</date>
            <delta_ts>2017-03-27 00:17:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170327000037.patch</filename>
            <type>text/plain</type>
            <size>225112</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li45YThjNWUxNzM3YjY2ZGE4
MzMxYzFiODlkMTI5OGQxZGU4YTFlNmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjUgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2Fs
bGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAg
IChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6
OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAgICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGlt
ZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNz
YXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAg
ICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAo
R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChwcmludEludGVybmFsKToK
KyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0KToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0
UGFzc2VkKToKKyAgICAgICAgKGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAg
ICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKHJ1bkpTQyk6Cisg
ICAgICAgICogcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAgIChKU0M6OkpT
UHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJy
ZWQ6OnJlamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oOgorICAg
ICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cHJvbWlzZUFzeW5jUGVuZGluZyk6CisgICAg
ICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwLgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BU
aW1lcjo6SlNSdW5Mb29wVGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2V0
UnVuTG9vcCk6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIp
OgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKToKKyAgICAgICAg
KEpTQzo6SlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1
bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6
aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1lci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaC4KKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVy
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNl
RGVmZXJyZWRUaW1lcik6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpkb1dv
cmspOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6cnVuUnVuTG9vcCk6Cisg
ICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJvbWlzZSk6Cisg
ICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZSk6
CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKToK
KyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2sp
OgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAoSlNDOjpQ
cm9taXNlRGVmZXJyZWRUaW1lcjo6c3RvcFJ1bm5pbmdUYXNrcyk6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0p
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHku
Y3BwOgorICAgICAgICAoSlNDOjpyZWplY3QpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUNv
bXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6Omluc3Rh
bnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAg
KEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMpOgorICAgICAgICAoSlNDOjp3ZWJBc3Nl
bWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemVkKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6cGxhbik6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OnJ1bm5hYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRl
cik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmludGVybmFsRnVuY3Rpb25Db3VudCk6CisgICAg
ICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnkuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6CisgICAg
ICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5SW5mb3JtYXRpb246Om1heGltdW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJ
bmZvcm1hdGlvbjo6aGFzUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6dGFrZVJlc2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1vZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFy
c2VyKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnN0YXRlU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW92ZVRvU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpmYWlsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnByZXBhcmUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpUaHJlYWRDb3VudEhvbGRlcjo6VGhyZWFkQ291bnRIb2xkZXIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpUaHJlYWRDb3VudEhvbGRlcjo6flRocmVhZENvdW50
SG9sZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjYW5j
ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpleHBvcnRzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxh
bjo6dGFrZU1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFr
ZUNhbGxMaW5rSW5mb3MpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlV2FzbUV4aXRT
dHVicyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Om1vZGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpzZXRNb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6c2V0UGVuZGlu
Z1Byb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwZW5kaW5nUHJvbWlzZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OnZtKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbGVkKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzV29yayk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
Omhhc0JlZW5QcmVwYXJlZCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbklubGluZXMuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAq
IHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6cHJpb3JpdHlTdHJpbmcpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6UXVldWVFbGVtZW50OjpuZXh0UHJpb3JpdHkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6
Oldhc206OldvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5X
b3JrbGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjplbnN1cmVXb3JrbGlzdCk6CisgICAgICAgICogd2FzbS9XYXNt
V29ya2xpc3QuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlj
a2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJv
bVZhbHVlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9y
dEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1v
cnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVs
ZTo6bW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxl
Ojpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2Up
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tG
b3IpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJ
bnN0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaDoKKwogMjAxNy0wMy0yNSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVy
bmluZyBhZnRlciB3ZSBkbyBUTFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYw
MDMxMGMzN2FiMTRhNzJkZjU3YWIyOTFjODJjYTc0MDM3ODNjMGQuLmViYTRjMzIwN2JkM2ZiYjYz
YTJjMGIzOGE2Mjc5ODU4ZGFkM2RlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMzE2LDExICsxMzE2LDE3IEBACiAJCTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBl
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi87IH07CiAJ
CTUyRjZDMzVEMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovOyB9
OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZD
MzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzMEZCMzAyMUU3
QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29y
a2xpc3QuaCAqLzsgfTsKKwkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBG
QjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKIAkJNTMxMzc0
QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBs
YW4uaCAqLzsgfTsKIAkJNTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1
Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDFGQzcwMURBQzMz
RTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAv
KiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCAqLzsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAw
RTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggKi87IH07CisJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAv
KiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTM0NjM4NzMx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5jcHAgKi87IH07CisJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQ
cm9taXNlRGVmZXJyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmggKi87IH07CisJCTUzNDYzODc3MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzQ2Mzg3NjFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICov
OyB9OwogCQk1MzQ4NkJCNzFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ4NkJCNjFDMTc5NUMz
MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHVibGljLCApOyB9OyB9OwogCQk1MzQ4NkJCQjFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFy
cmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwICovOyB9OwogCQk1MzQ5
MDI4NTFDNzI3NkI3MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDkwMjgyMUM3MjQyQzgwMDEyQkNC
OCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwICovOyB9OwpAQCAtMTM1NSw2ICsxMzYxLDcgQEAKIAkJ
NTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0MUQ1QTdBRUYwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRTk3MUQ1QTdCRUMwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxl
UGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFs
RnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLzsgfTsKIAkJNTNG
QTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8q
IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07
CiAJCTUzRkQwNEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDEx
RDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07CkBAIC0y
MjMzLDggKzIyNDAsNiBAQAogCQlDMkNGMzlDMTE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAqLzsg
fTsKIAkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDRjM5QzAxNkUx
NUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovOyB9OwogCQlDMkRBNzc4MzE4
RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUMyRTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhE
IC8qIEhlYXBUaW1lci5jcHAgKi87IH07Ci0JCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBI
ZWFwVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdD
MTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJh
cmVEYXRhLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAq
LzsgfTsKIAkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEQx
N0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zODAwLDExICszODA1LDE3IEBACiAJ
CTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHlwZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzBGQjMw
MTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyog
V2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURB
QzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0Iz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0
NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzNDYzODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1J1bkxvb3BUaW1lci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAv
KiBQcm9taXNlRGVmZXJyZWRUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcm9taXNlRGVmZXJyZWRUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzQ2Mzg3NjFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvbWlzZURlZmVycmVkVGltZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ4NkJCNjFDMTc5NUMzMDBGNkYzQUYg
LyogSlNUeXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlw
ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ4NkJCQTFDMThFODQ1
MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTVHlwZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzNDkwMjgyMUM3MjQyQzgwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVHlwZWRBcnJheUNUZXN0LmNwcDsgcGF0aCA9
IEFQSS90ZXN0cy9UeXBlZEFycmF5Q1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzg0NSw2ICszODU2LDcgQEAKIAkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1v
ZHVsZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y0MEU5NjFENUE3
QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbklubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGQTJBRTIxQ0YzODAzOTAw
MjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29u
dmVudGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00Nzg4LDggKzQ4MDAs
NiBAQAogCQlDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElXcmFwcGVyT2Jq
ZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkNGMzlDMDE2RTE1QTgxMDBE
RDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQVBJV3JhcHBlck9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBUaW1lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0
dXJlUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Ry
dWN0dXJlUmFyZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUw
QzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVC
YXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTA0LDggKzU5MTQs
NiBAQAogCQkJCUE1NEMyQUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCAqLywK
IAkJCQlBNTMxMUMzNDFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAg
Ki8sCiAJCQkJQTUzMTFDMzUxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIu
aCAqLywKLQkJCQlDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywK
LQkJCQlDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8sCiAJCQkJMEZB
REU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1
NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0Mx
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLApAQCAtNjI3MywxMSAr
NjI4MSwxNCBAQAogCQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmgg
Ki8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJ
CQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLywKKwkJCQk1M0Y4RDFG
RjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8sCiAJCQkJNTNGNDBFODQx
RDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3
OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1Nzky
MDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAogCQkJCTUzRkY3RjlBMURCRkQyQjkwMEEy
NkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwICovLAogCQkJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkND
QyAvKiBXYXNtVmFsaWRhdGUuaCAqLywKKwkJCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmNwcCAqLywKKwkJCQk1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2Fz
bVdvcmtsaXN0LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHdhc207CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNjQzNCw2ICs2NDQ1LDggQEAKIAkJCQkxNEExNTYzMDEwOTY2MzY1MDA2
RkEyNjAgLyogRGF0ZUluc3RhbmNlQ2FjaGUuaCAqLywKIAkJCQlCQ0QyMDM0NzBFMTcxMzVFMDAy
QzdFODIgLyogRGF0ZVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNEMjAzNDgwRTE3MTM1RTAwMkM3
RTgyIC8qIERhdGVQcm90b3R5cGUuaCAqLywKKwkJCQk1MzQ2Mzg3NjFFNzFFMDZFMDBGMTJBQzEg
LyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwICovLAorCQkJCTUzNDYzODc0MUU3MERERUMwMEYx
MkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oICovLAogCQkJCTE2OTk0OEVERTY4RDQwNTRC
MDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRkUwNTAwRjFB
QTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAxMDFB
QTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmggKi8sCkBAIC02ODIyLDYgKzY4MzUs
OCBAQAogCQkJCTBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVz
LmggKi8sCiAJCQkJQkNEMjAyQkYwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5j
cHAgKi8sCiAJCQkJQkNEMjAyQzAwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5o
ICovLAorCQkJCTUzNDYzODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAg
Ki8sCisJCQkJNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8s
CiAJCQkJNzBCMEE5RDAxQTlCNjYyMDAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oICovLAogCQkJ
CTUyNzc3M0REMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgKi8sCiAJCQkJNTJD
MDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi8sCkBAIC04MTE2LDYgKzgx
MzEsNyBAQAogCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzBGQjMwMjFFN0EwQjZFMDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAy
NzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3
ODAxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjM1
LDYgKzgyNTEsNyBAQAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDhERTBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZy
YW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJv
bWlzZURlZmVycmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0Mw
MDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJE
NzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg1MjEsNiArODUzOCw3IEBACiAJCQkJRTNGRjc1MzMxRDlDRUExODAwQzdF
MTZEIC8qIERPTUpJVEdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Q0ExNTQx
REJDM0E1QzAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTNDMDhFM0MxREE0MUI4MTAwMzk0NzhGIC8qIERPTUpJVFBhdGNocG9pbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkU2RjU2REUxRTY0RUFENjAwRDE3ODAxIC8qIFZNVHJhcHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzN0FEODNDMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRQYXRj
aHBvaW50UGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzdBRDgzRDFEQTQ5Mjg2MDBGM0Q0
MTIgLyogRE9NSklUUmVnLmggaW4gSGVhZGVycyAqLywKQEAgLTg2OTAsNyArODcwOCw2IEBACiAJ
CQkJQTUzOThGQUIxQzc1MERBNDAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU0QzJBQjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBI
ZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAv
KiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBREU2NzMxRDREMjNCRTAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTM5LDYg
KzkxNTYsNyBAQAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYg
LyogV2FzbVBsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4
MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjdDMzlGQjFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC05OTU4LDYgKzk5NzYsNyBAQAogCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0MzJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUwRjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1
MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQzNDIyQTYyMUMxNThFNkEwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOERGNTFCRTkzRDU1MDAxM0M4OEYgLyog
QjNDb25zdHJhaW5lZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTBEMUJGMDI3
NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNTEs
NiArMTAyNzAsNyBAQAogCQkJCTE0QUQ5MTE3MURDQTk3RkQwMDE0RjlGRSAvKiBFdmFsQ29kZUJs
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzM0MUUyMURDMkNFOTYwMEFBMjlCQSAvKiBF
dmFsRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTQ5ODIwMzE4OTFEMEIwMDA4
MUU1QjggLyogRXZlbnRMb29wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNDYzODczMUU3MEQw
MTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTFD
MEZGRjFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMTJERTBGMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25G
dXp6LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAzMjgsNyArMTAzNDgsNiBAQAogCQkJCUE1Mzk4
RkFDMUM3NTBEQTYwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTU0QzJBQjAxQzY1NDRFRTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTMxMUMzNzFDNzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVh
cFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDMjE0MzA4MUNB
MzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNF
MTA3RUMzNzYwMDQyN0E0OCAvKiBJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA2
NTIsNiArMTA2NzEsNyBAQAogCQkJCTk5MkFCQ0Y5MUJFQTlCRDIwMDY0MDNBMCAvKiBSZW1vdGVB
dXRvbWF0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MkY1NkI0MUU0RTg0QTQw
MDM1OTUzQiAvKiBSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXRDb2NvYS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTk5OEVENjc0MUJFRDcwQUMwMEREODAxNyAvKiBSZW1vdGVDb250cm9sbGFibGVUYXJn
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM0NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFBy
b21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVF
RkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk5NTU2Njg2MUU0RThCMEYwMEFBRTEzQyAvKiBSZW1vdGVJbnNwZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTkyRjU2QjUxRTRFODRBODAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3Rv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDQWN0aXZpdHlDYWxsYmFjay5oCmluZGV4IGRkZWUyNTgzZTQ5ZTZiOTY5MzkwODBlMzM4ZWI1
YTk5YzA0MGI5MmMuLmZhN2I2NGRhOWM0MzFmN2YwMjE4MTdiYjk0YTk0OTZmMTZlYzE1NzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5oCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgi
CisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
ICNpZiBVU0UoQ0YpCkBAIC00MCw4ICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRnVs
bEdDQWN0aXZpdHlDYWxsYmFjazsKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsK
IHB1YmxpYzoKKyAgICB0eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgc3RhdGljIFJl
ZlB0cjxGdWxsR0NBY3Rpdml0eUNhbGxiYWNrPiBjcmVhdGVGdWxsVGltZXIoSGVhcCopOwogICAg
IHN0YXRpYyBSZWZQdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBjcmVhdGVFZGVuVGltZXIoSGVhcCop
OwogCkBAIC03MCwyMSArNzEsMjEgQEAgcHJvdGVjdGVkOgogCiAjaWYgVVNFKENGKQogICAgIEdD
QWN0aXZpdHlDYWxsYmFjayhWTSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAg
ICA6IEJhc2Uodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxh
eShzX2RlY2FkZSkKICAgICB7CiAgICAgfQogI2VsaWYgVVNFKEdMSUIpCiAgICAgR0NBY3Rpdml0
eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFz
ZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVj
YWRlKQogICAgIHsKICAgICB9CiAjZWxzZQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhWTSogdm0p
Ci0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAgICAgICwg
bV9lbmFibGVkKHRydWUpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk2MTI4ZDAzODM4
Y2E0YTc0NTUwZWQ5MTZkZjc3YTMyNWQ2YjQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSGVhcFRpbWVyLmgiCi0KLSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNp
bmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2lu
Y2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNFKEdM
SUIpCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYg
VVNFKENGKQotICAgIAotY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgSGVhcFRpbWVyOjpzX2RlY2FkZSA9
IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0p
Ci0gICAgOiBtX3ZtKHZtKQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotewotICAg
IHNldFJ1bkxvb3Aodm0tPmhlYXAucnVuTG9vcCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNl
dFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCi17Ci0gICAgaWYgKG1fcnVuTG9vcCkgewot
ICAgICAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0
KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxp
ZGF0ZShtX3RpbWVyLmdldCgpKTsKLSAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7Ci0gICAgICAg
IG1fdGltZXIuY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJ1bkxvb3ApIHsKLSAgICAg
ICAgbV9ydW5Mb29wID0gcnVuTG9vcDsKLSAgICAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNp
emVvZihDRlJ1bkxvb3BUaW1lckNvbnRleHQpKTsKLSAgICAgICAgbV9jb250ZXh0LmluZm8gPSB0
aGlzOwotICAgICAgICBtX3RpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGlt
ZXJEaWRGaXJlLCAmbV9jb250ZXh0KSk7Ci0gICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVu
TG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICB9
Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci0gICAgc2V0UnVuTG9vcCgwKTsKLX0K
LQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCog
Y29udGV4dFB0cikKLXsKLSAgICBIZWFwVGltZXIqIHRpbWVyID0gc3RhdGljX2Nhc3Q8SGVhcFRp
bWVyKj4oY29udGV4dFB0cik7Ci0gICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOwotCi0gICAg
UmVmUHRyPFZNPiB2bSA9IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7Ci0gICAgaWYgKCF2bSkgewot
ICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBn
aXZlIHVwLgotICAgICAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQo
KSk7Ci0gICAgICAgIHRpbWVyLT5kb1dvcmsoKTsKLSAgICB9Ci0KLSAgICB0aW1lci0+bV9hcGlM
b2NrLT51bmxvY2soKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91Ymxl
IGludGVydmFsSW5TZWNvbmRzKQotewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRl
KG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWxJblNl
Y29uZHMpOwotICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6
Y2FuY2VsVGltZXIoKQotewotICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGlt
ZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNhZGUpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSBmYWxzZTsKLX0KLQotI2VsaWYgVVNFKEdMSUIpCi0KLWNvbnN0IGxvbmcg
SGVhcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAqIDM2NSAqIDEwOwotCi1zdGF0aWMg
R1NvdXJjZUZ1bmNzIGhlYXBUaW1lclNvdXJjZUZ1bmN0aW9ucyA9IHsKLSAgICBudWxscHRyLCAv
LyBwcmVwYXJlCi0gICAgbnVsbHB0ciwgLy8gY2hlY2sKLSAgICAvLyBkaXNwYXRjaAotICAgIFtd
KEdTb3VyY2UqLCBHU291cmNlRnVuYyBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdi
b29sZWFuCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbGJhY2sodXNlckRhdGEpOwotICAgIH0s
Ci0gICAgbnVsbHB0ciwgLy8gZmluYWxpemUKLSAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxi
YWNrCi0gICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9tYXJzaGFsbAotfTsKLQotSGVhcFRpbWVyOjpI
ZWFwVGltZXIoVk0qIHZtKQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFw
aUxvY2soKSkKLSAgICAsIG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmaGVhcFRpbWVy
U291cmNlRnVuY3Rpb25zLCBzaXplb2YoR1NvdXJjZSkpKSkKLXsKLSAgICBnX3NvdXJjZV9zZXRf
bmFtZShtX3RpbWVyLmdldCgpLCAiW0phdmFTY3JpcHRDb3JlXSBIZWFwVGltZXIiKTsKLSAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1lci5nZXQoKSwgW10oZ3BvaW50ZXIgdXNlckRhdGEp
IC0+IGdib29sZWFuIHsKLSAgICAgICAgYXV0byYgaGVhcFRpbWVyID0gKnN0YXRpY19jYXN0PEhl
YXBUaW1lcio+KHVzZXJEYXRhKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoaGVh
cFRpbWVyLm1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBIZWFwVGltZXI6
OnNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOwotICAgICAgICBoZWFwVGltZXIudGltZXJEaWRG
aXJlKCk7Ci0gICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKLSAgICB9LCB0aGlzLCBu
dWxscHRyKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19tYWluX2NvbnRl
eHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOwotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQot
ewotICAgIGdfc291cmNlX2Rlc3Ryb3kobV90aW1lci5nZXQoKSk7Ci19Ci0KLXZvaWQgSGVhcFRp
bWVyOjp0aW1lckRpZEZpcmUoKQotewotICAgIG1fYXBpTG9jay0+bG9jaygpOwotCi0gICAgaWYg
KCFtX2FwaUxvY2stPnZtKCkpIHsKLSAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3ll
ZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KLSAgICAgICAgbV9hcGlMb2NrLT51bmxvY2so
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcihtX3ZtKTsKLSAgICAgICAgZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgbV9hcGlMb2Nr
LT51bmxvY2soKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGlu
dGVydmFsSW5TZWNvbmRzKQotewotICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIu
Z2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNF
Q19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGlt
ZXI6OmNhbmNlbFRpbWVyKCkKLXsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVy
LmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NF
Qyk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOwotfQotI2Vsc2UKLUhlYXBUaW1lcjo6SGVh
cFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBU
aW1lcigpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9p
ZCBIZWFwVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlKQotewotfQotCi12b2lkIEhlYXBUaW1l
cjo6Y2FuY2VsVGltZXIoKQotewotfQotI2VuZGlmCi0gICAgCi0KLX0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzJiNDcxZjYwZGI4YzYzNzRjNTUwMTk4ZDBiZTllMmZjY2E4YTZiNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0Uo
Q0YpCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNlbmRpZgot
Ci0jaWYgVVNFKEdMSUIpCi0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU0xvY2s7Ci1jbGFzcyBWTTsKLQotY2xhc3MgSGVh
cFRpbWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEhlYXBUaW1lcj4gewotcHVibGlj
OgotICAgIEhlYXBUaW1lcihWTSopOwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgdm9pZCB0aW1l
ckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKTsKLSNlbmRpZgotICAgIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkhlYXBUaW1lcigpOwotICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKSA9IDA7Ci0KLSAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5T
ZWNvbmRzKTsKLSAgICB2b2lkIGNhbmNlbFRpbWVyKCk7Ci0gICAgYm9vbCBpc1NjaGVkdWxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTY2hlZHVsZWQ7IH0KLQotI2lmIFVTRShDRikKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKLSNlbmRpZiAvLyBV
U0UoQ0YpCi0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgVk0qIG1fdm07Ci0KLSAgICBSZWZQdHI8SlNM
b2NrPiBtX2FwaUxvY2s7Ci0gICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFsc2UgfTsKLSNpZiBV
U0UoQ0YpCi0gICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVjYWRlOwotCi0gICAg
UmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOwotICAgIFJldGFpblB0cjxDRlJ1
bkxvb3BSZWY+IG1fcnVuTG9vcDsKLSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9j
b250ZXh0OwotCi0gICAgTG9jayBtX3NodXRkb3duTXV0ZXg7Ci0jZWxpZiBVU0UoR0xJQikKLSAg
ICBzdGF0aWMgY29uc3QgbG9uZyBzX2RlY2FkZTsKLSAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOwot
ICAgIEdSZWZQdHI8R1NvdXJjZT4gbV90aW1lcjsKLSNlbmRpZgotICAgIAotcHJpdmF0ZToKLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKaW5kZXggY2Zl
ODliODcwN2NlYmM3ZjRhZjRkNjM1NjY5NDExZTE3ZGMwYWM1Mi4uOGNiZmE5ZTgwNDBkYzYxZWZi
MDE5YjIxNDU1NDQ1NWUyZmE4MzFiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCkBAIC00MSwxMSArNDEsMTEgQEAgc3RhdGljIGNv
bnN0IGRvdWJsZSBzd2VlcFRpbWVNdWx0aXBsaWVyID0gMS4wIC8gc3dlZXBUaW1lVG90YWw7CiAK
IHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzY2hlZHVsZVRpbWVyKCkKIHsKLSAgICBIZWFwVGlt
ZXI6OnNjaGVkdWxlVGltZXIoc3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsK
KyAgICBCYXNlOjpzY2hlZHVsZVRpbWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlw
bGllcik7CiB9CiAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAq
IGhlYXApCi0gICAgOiBIZWFwVGltZXIoaGVhcC0+dm0oKSkKKyAgICA6IEJhc2UoaGVhcC0+dm0o
KSkKICAgICAsIG1fY3VycmVudEFsbG9jYXRvcihudWxscHRyKQogewogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAppbmRleCAzNGZhODhjYzJl
ZmE3NWM0ZjI4YzA1N2M3ODlhNmFlMTE5ODAzYmU2Li5kZjFjZmM5MjQ5NmE3ZGE0NjYxMGVhYTJm
NzU2ZmQzY2E1YWI1ZGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIkhlYXBUaW1lci5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMzLDggKzMzLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBjbGFzcyBIZWFwOwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogCi1jbGFz
cyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEluY3JlbWVu
dGFsU3dlZXBlciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU1J1bkxvb3BUaW1lciBCYXNlOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IElu
Y3JlbWVudGFsU3dlZXBlcihIZWFwKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0
YXJ0U3dlZXBpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0
b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJ
Zk5lY2Vzc2FyeVRpbWVyLmNwcAppbmRleCA2ZTMxNzZjMmNjNzZiNjg0NGMzYWZlYjA3M2M2YmNh
MTNmNDVkM2NjLi45NDBkMzlkZTI0YWNmZDMyZDk2YTRhYzIxZWQyYzJhNTMxN2MyMWNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIu
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogU3RvcElmTmVjZXNzYXJ5
VGltZXI6OlN0b3BJZk5lY2Vzc2FyeVRpbWVyKFZNKiB2bSkKLSAgICA6IEhlYXBUaW1lcih2bSkK
KyAgICA6IEJhc2Uodm0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCmluZGV4IGE2ODMxODQ3NDg5Yzg2YzM2YjY4OWUxOGRh
MDQ4NjNhMWU0ZWU0NDUuLmZlYmY1MTZhZjU0ODRiMGNiZDA4MDZkNGNjMzQ5ZDk3NDk3YmYyNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGlt
ZXIuaApAQCAtMjUsMTQgKzI1LDE1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVh
cFRpbWVyLmgiCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEhl
YXBUaW1lciB7CitjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lciA6IHB1YmxpYyBKU1J1bkxvb3BU
aW1lciB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1lciBCYXNlOwogICAgIGV4
cGxpY2l0IFN0b3BJZk5lY2Vzc2FyeVRpbWVyKFZNKik7CiAgICAgCiAgICAgdm9pZCBkb1dvcmso
KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZ0lubGluZXMuaApp
bmRleCA2YjgxOTdjNjg2NmEwNTk5NWIzMmE4OGJlNzk0MWRkMGZkMWI5MGE2Li4yMDVmYjA0ZmI2
OTE0N2Q4ZmQ1ZTcyYWUxMGEwMzJkNTFlMTNkOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Ryb25nSW5saW5lcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggYWQ0YTMxNDA4YTZiMzViMjlkM2M1
NGI5MWEzNjkwZTVlNTAxMGE0Ny4uM2EzOGRjZDk3ODRmYTVlOTdjNGZkZDkzNzI3NDQzZmY1MDJh
MDNlZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCiAjaW5jbHVkZSAi
UHJvZmlsZXJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAj
aW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJSZWxlYXNlSGVhcEFjY2Vzc1Nj
b3BlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgpAQCAtNzMsOCArNzQsOSBAQAog
I2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5o
IgogI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJXYXNtUGxh
bi5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtUGxhbklubGluZXMu
aCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNs
dWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTkwNyw4ICs5MDksOCBAQCBjb25z
dCBDbGFzc0luZm8gRE9NSklUR2V0dGVyQ29tcGxleDo6c19pbmZvID0geyAiRE9NSklUR2V0dGVy
Q29tcGxleCIsICZCYXNlOjpzXwogY29uc3QgQ2xhc3NJbmZvIERPTUpJVEZ1bmN0aW9uT2JqZWN0
OjpzX2luZm8gPSB7ICJET01KSVRGdW5jdGlvbk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9NSklURnVuY3Rpb25PYmplY3QpIH07CiBjb25zdCBD
bGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50aW1lQXJyYXkiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVBcnJheSkgfTsKIGNv
bnN0IENsYXNzSW5mbyBTaW1wbGVPYmplY3Q6OnNfaW5mbyA9IHsgIlNpbXBsZU9iamVjdCIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU2ltcGxlT2JqZWN0KSB9
Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jUGFzc2VkIHsgZmFsc2UgfTsKLXN0YXRpYyBib29s
IHRlc3QyNjJBc3luY1Rlc3QgeyBmYWxzZSB9Oworc3RhdGljIHVuc2lnbmVkIGFzeW5jVGVzdFBh
c3NlcyB7IDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcyB7IDAg
fTsKIAogRWxlbWVudEhhbmRsZU93bmVyKiBFbGVtZW50OjpoYW5kbGVPd25lcigpCiB7CkBAIC0x
MDc3LDYgKzEwNzksOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyhFeGVjU3RhdAogI2VuZGlmCiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWF4QXJndW1lbnRzKEV4ZWNT
dGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3lu
Y1Rlc3QoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkFzeW5jVGVzdFBhc3NlZChFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdh
c21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKik7CkBAIC0xMzQ5LDYgKzEzNTMsOSBAQCBwcm90
ZWN0ZWQ6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJtYXhBcmd1bWVudHMiLCBmdW5jdGlv
bk1heEFyZ3VtZW50cywgMCk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3Qi
LCBmdW5jdGlvbkFzeW5jVGVzdCwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXN5bmNU
ZXN0UGFzc2VkIiwgZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQsIDEpOworCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zIiwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucywgMCk7CiAjZW5kaWYKQEAgLTE3
MzIsMTEgKzE3MzksMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBGSUxFKiBvdXQpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAodGVzdDI2MkFz
eW5jVGVzdCkgeworICAgIGlmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcykgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1N0
cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCks
ICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpCi0gICAgICAgICAgICB0ZXN0MjYyQXN5bmNQ
YXNzZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSAmJiBXVEY6OmVxdWFsKGFzU3RyaW5n
KHZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpLCAiVGVzdDI2MjpBc3luY1Rlc3RDb21wbGV0ZSIp
KSB7CisgICAgICAgICAgICBhc3luY1Rlc3RQYXNzZXMrKzsKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKQEAg
LTMwNDksNiArMzA1NywyNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
TWF4QXJndW1lbnRzKEV4ZWNTdGF0ZSopCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihKU0M6Om1heEFyZ3VtZW50cykpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQXN5bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTVmFsdWUgbnVtYmVyT2ZBc3luY1Bhc3NlcyA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAg
IGlmICghbnVtYmVyT2ZBc3luY1Bhc3Nlcy5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkV4cGVjdGVkIGZpcnN0IGFyZ3Vt
ZW50IHRvIGEgdWludDMyIikpOworCisgICAgYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgPSBudW1i
ZXJPZkFzeW5jUGFzc2VzLmFzVUludDMyKCk7CisgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5l
ZCgpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5bmNUZXN0
UGFzc2VkKEV4ZWNTdGF0ZSopCit7CisgICAgYXN5bmNUZXN0UGFzc2VzKys7CisgICAgcmV0dXJu
IGVuY29kZWRKU1VuZGVmaW5lZCgpOworfQorCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiBz
dGF0aWMgQ1N0cmluZyB2YWx1ZVdpdGhUeXBlT2ZXYXNtVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgd2FzbVZhbHVlKQpAQCAtMzE1OSwyMSArMzE4
NiwyMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RX
YXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSogZQogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gZnVuY3Rpb25Db3VudCArIDIpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBXYXNt
OjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291cmNlLT52ZWN0b3IoKSks
IHNvdXJjZS0+bGVuZ3RoKCkpOwotICAgIHBsYW4ucnVuKCk7Ci0gICAgaWYgKHBsYW4uZmFpbGVk
KCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFu
LmVycm9yTWVzc2FnZSgpKTsKKyAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgV2FzbTo6UGxhbih2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkp
LCBzb3VyY2UtPmxlbmd0aCgpLCBXYXNtOjpQbGFuOjpGdWxsQ29tcGlsZSwgV2FzbTo6UGxhbjo6
ZG9udEZpbmFsaXplKSk7CisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4u
Y29weVJlZigpKTsKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmNvbXBsZXRlUGxhblN5bmNo
cm9ub3VzbHkocGxhbi5nZXQoKSk7CisgICAgaWYgKHBsYW4tPmZhaWxlZCgpKSB7CisgICAgICAg
IGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIG1vZHVsZTogIiwgcGxhbi0+ZXJyb3JNZXNzYWdl
KCkpOwogICAgICAgICBDUkFTSCgpOwogICAgIH0KIAotICAgIGlmIChwbGFuLmludGVybmFsRnVu
Y3Rpb25Db3VudCgpICE9IGZ1bmN0aW9uQ291bnQpCisgICAgaWYgKHBsYW4tPmludGVybmFsRnVu
Y3Rpb25Db3VudCgpICE9IGZ1bmN0aW9uQ291bnQpCiAgICAgICAgIENSQVNIKCk7CiAKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBjYWxsZWVzOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGtl
ZXBBbGl2ZTsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IFVJTlRfTUFYOwot
ICAgICAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwKKyAgICAgICAgcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoCiAgICAgICAgICAgICBbJl0gKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxlZUluZGV4IHx8IChjYWxsZWVJbmRleCAtIDEg
PT0gbGFzdEluZGV4KSk7CiAgICAgICAgICAgICAgICAgY2FsbGVlcy5hcHBlbmQoanNFbnRyeXBv
aW50Q2FsbGVlKTsKQEAgLTMxODEsNyArMzIwOSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBl
CiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gY2FsbGVlSW5kZXg7CiAgICAgICAgICAgICB9
KTsKICAgICB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
b2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9
IHBsYW4tPnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1
bGVJbmZvcm1hdGlvbi0+bWVtb3J5KTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbkNvdW50OyArK2kpIHsKQEAgLTM2NjYsNyArMzY5NCw3IEBAIHZvaWQgQ29tbWFuZExp
bmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgfQogCiAg
ICAgICAgIGlmICghc3RyY21wKGFyZywgIi0tdGVzdDI2Mi1hc3luYyIpKSB7Ci0gICAgICAgICAg
ICB0ZXN0MjYyQXN5bmNUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGFzeW5jVGVzdEV4cGVjdGVk
UGFzc2VzKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0zNzM4LDIz
ICszNzY2LDM0IEBAIGludCBydW5KU0MoQ29tbWFuZExpbmUgb3B0aW9ucywgY29uc3QgRnVuYyYg
ZnVuYykKICAgICBXb3JrZXIgd29ya2VyKFdvcmtlcnM6OnNpbmdsZXRvbigpKTsKICAgICAKICAg
ICBWTSYgdm0gPSBWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoJnZtKTsKLQogICAgIGludCByZXN1bHQ7Ci0gICAgaWYgKG9wdGlvbnMubV9w
cm9maWxlICYmICF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgIHZtLm1fcGVyQnl0
ZWNvZGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8UHJvZmlsZXI6OkRhdGFiYXNlPih2bSk7
CisgICAgYm9vbCBzdWNjZXNzOworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3Jl
YXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBvcHRp
b25zLm1fYXJndW1lbnRzKTsKLSAgICBnbG9iYWxPYmplY3QtPnNldFJlbW90ZURlYnVnZ2luZ0Vu
YWJsZWQob3B0aW9ucy5tX2VuYWJsZVJlbW90ZURlYnVnZ2luZyk7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gZnVuYyh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAob3B0aW9ucy5tX2ludGVyYWN0aXZl
ICYmIHN1Y2Nlc3MpCi0gICAgICAgIHJ1bkludGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSAmJiAhdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQor
ICAgICAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxQ
cm9maWxlcjo6RGF0YWJhc2U+KHZtKTsKIAotICAgIHZtLmRyYWluTWljcm90YXNrcygpOwotICAg
IHJlc3VsdCA9IHN1Y2Nlc3MgJiYgKHRlc3QyNjJBc3luY1Rlc3QgPT0gdGVzdDI2MkFzeW5jUGFz
c2VkKSA/IDAgOiAzOworICAgICAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2Jh
bE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNO
dWxsKCkpLCBvcHRpb25zLm1fYXJndW1lbnRzKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRS
ZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKG9wdGlvbnMubV9lbmFibGVSZW1vdGVEZWJ1Z2dpbmcpOwor
ICAgICAgICBzdWNjZXNzID0gZnVuYyh2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaWYgKG9w
dGlvbnMubV9pbnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQorICAgICAgICAgICAgcnVuSW50ZXJhY3Rp
dmUoZ2xvYmFsT2JqZWN0KTsKKworICAgICAgICB2bS5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICB9
CisjaWYgVVNFKENGKQorICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5ydW5SdW5Mb29wKCk7
CisjZW5kaWYKIAotICAgIGlmIChvcHRpb25zLm1fZXhpdENvZGUpCi0gICAgICAgIHByaW50Zigi
anNjIGV4aXRpbmcgJWRcbiIsIHJlc3VsdCk7CisgICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAoYXN5
bmNUZXN0RXhwZWN0ZWRQYXNzZXMgPT0gYXN5bmNUZXN0UGFzc2VzKSA/IDAgOiAzOworCisgICAg
aWYgKG9wdGlvbnMubV9leGl0Q29kZSkgeworICAgICAgICBwcmludGYoImpzYyBleGl0aW5nICVk
IiwgcmVzdWx0KTsKKyAgICAgICAgaWYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzICE9IGFzeW5j
VGVzdFBhc3NlcykKKyAgICAgICAgICAgIHByaW50ZigiIGJlY2F1c2UgZXhwZWN0ZWQ6ICVkIGFz
eW5jIHRlc3QgcGFzc2VzIGJ1dCBnb3Q6ICVkIGFzeW5jIHRlc3QgcGFzc2VzIiwgYXN5bmNUZXN0
RXhwZWN0ZWRQYXNzZXMsIGFzeW5jVGVzdFBhc3Nlcyk7CisgICAgICAgIHByaW50ZigiXG4iKTsK
KyAgICB9CiAKICAgICBpZiAob3B0aW9ucy5tX3Byb2ZpbGUpIHsKICAgICAgICAgaWYgKCF2bS5t
X3BlckJ5dGVjb2RlUHJvZmlsZXItPnNhdmUob3B0aW9ucy5tX3Byb2ZpbGVyT3V0cHV0LnV0Zjgo
KS5kYXRhKCkpKQpAQCAtMzc2MiwyNCArMzgwMSwyOCBAQCBpbnQgcnVuSlNDKENvbW1hbmRMaW5l
IG9wdGlvbnMsIGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICBpZiAoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKQotICAgICAgICBwcmludGYoIkpTQyBF
WENFUFRJT04gRlVaWjogZW5jb3VudGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRp
b25GdXp6Q2hlY2tzKCkpOwotICAgIGJvb2wgZmlyZUF0RW5hYmxlZCA9Ci0gICAgT3B0aW9uczo6
ZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0KCkgfHwgT3B0aW9uczo6ZmlyZUV4ZWN1dGFi
bGVBbGxvY2F0aW9uRnV6ekF0T3JBZnRlcigpOwotICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9z
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpKSkKLSAgICAgICAgcHJpbnRmKCJKU0MgRVhFQ1VU
QUJMRSBBTExPQ0FUSU9OIEZVWlo6IGVuY291bnRlcmVkICV1IGNoZWNrcy5cbiIsIG51bWJlck9m
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tzKCkpOwotICAgIGlmIChPcHRpb25zOjp1c2VP
U1JFeGl0RnV6eigpKSB7Ci0gICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElUIEZVWlo6IGVuY291
bnRlcmVkICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09TUkV4aXRGdXp6Q2hl
Y2tzKCkpOwotICAgICAgICBwcmludGYoIkpTQyBPU1IgRVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAl
dSBkeW5hbWljIGNoZWNrcy5cbiIsIG51bWJlck9mT1NSRXhpdEZ1enpDaGVja3MoKSk7Ci0gICAg
fQotCi0gICAgYXV0byBjb21waWxlVGltZVN0YXRzID0gSklUOjpjb21waWxlVGltZVN0YXRzKCk7
Ci0gICAgVmVjdG9yPENTdHJpbmc+IGNvbXBpbGVUaW1lS2V5czsKLSAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogY29tcGlsZVRpbWVTdGF0cykKLSAgICAgICAgY29tcGlsZVRpbWVLZXlzLmFwcGVuZChl
bnRyeS5rZXkpOwotICAgIHN0ZDo6c29ydChjb21waWxlVGltZUtleXMuYmVnaW4oKSwgY29tcGls
ZVRpbWVLZXlzLmVuZCgpKTsKLSAgICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlz
KQotICAgICAgICBwcmludGYoIiU0MHM6ICUuM2xmIG1zXG4iLCBrZXkuZGF0YSgpLCBjb21waWxl
VGltZVN0YXRzLmdldChrZXkpKTsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKQorICAgICAgICAg
ICAgcHJpbnRmKCJKU0MgRVhDRVBUSU9OIEZVWlo6IGVuY291bnRlcmVkICV1IGNoZWNrcy5cbiIs
IG51bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgYm9vbCBmaXJlQXRFbmFi
bGVkID0KKyAgICAgICAgT3B0aW9uczo6ZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0KCkg
fHwgT3B0aW9uczo6ZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0T3JBZnRlcigpOworICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkgJiYgKCFmaXJl
QXRFbmFibGVkIHx8IE9wdGlvbnM6OnZlcmJvc2VFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enooKSkp
CisgICAgICAgICAgICBwcmludGYoIkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5j
b3VudGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpD
aGVja3MoKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VPU1JFeGl0RnV6eigpKSB7CisgICAg
ICAgICAgICBwcmludGYoIkpTQyBPU1IgRVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAldSBzdGF0aWMg
Y2hlY2tzLlxuIiwgbnVtYmVyT2ZTdGF0aWNPU1JFeGl0RnV6ekNoZWNrcygpKTsKKyAgICAgICAg
ICAgIHByaW50ZigiSlNDIE9TUiBFWElUIEZVWlo6IGVuY291bnRlcmVkICV1IGR5bmFtaWMgY2hl
Y2tzLlxuIiwgbnVtYmVyT2ZPU1JFeGl0RnV6ekNoZWNrcygpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIAorICAgICAgICBhdXRvIGNvbXBpbGVUaW1lU3RhdHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3Rh
dHMoKTsKKyAgICAgICAgVmVjdG9yPENTdHJpbmc+IGNvbXBpbGVUaW1lS2V5czsKKyAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IGNvbXBpbGVUaW1lU3RhdHMpCisgICAgICAgICAgICBjb21waWxl
VGltZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgICAgIHN0ZDo6c29ydChjb21waWxlVGlt
ZUtleXMuYmVnaW4oKSwgY29tcGlsZVRpbWVLZXlzLmVuZCgpKTsKKyAgICAgICAgZm9yIChDU3Ry
aW5nIGtleSA6IGNvbXBpbGVUaW1lS2V5cykKKyAgICAgICAgICAgIHByaW50ZigiJTQwczogJS4z
bGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIH0K
ICNlbmRpZgogCiAgICAgaWYgKE9wdGlvbnM6OmdjQXRFbmQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCmluZGV4IDY5Njdl
MDNhZmUxNTQyNDRkMWUyZDBjYjAzYTQ2MTA4OTQwNTAxZDUuLjFkYTA2MDFmODk3OGUxMGZmODkz
Y2EzMWUxYjNlOGZiZGQyNTJjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJK
U1Byb21pc2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC05OSwxMSArMTAwLDE1IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uLCBKU1Zh
bHVlIHZhbHVlCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBjYWxsRnVuY3Rpb24oZXhlYywgbV9yZXNvbHZlLmdl
dCgpLCB2YWx1ZSk7CisgICAgYm9vbCB3YXNQZW5kaW5nID0gZXhlYy0+dm0oKS5wcm9taXNlRGVm
ZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhpcyk7CisgICAgQVNTRVJUX1VOVVNF
RCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlzZUlzQXN5bmNQZW5kaW5nKTsKIH0K
IAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSByZWFzb24pCiB7CiAgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIG1fcmVqZWN0LmdldCgpLCByZWFz
b24pOworICAgIGJvb2wgd2FzUGVuZGluZyA9IGV4ZWMtPnZtKCkucHJvbWlzZURlZmVycmVkVGlt
ZXItPmNhbmNlbFBlbmRpbmdQcm9taXNlKHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQod2FzUGVu
ZGluZywgd2FzUGVuZGluZyA9PSBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyk7CiB9CiAKIHZvaWQg
SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogcmVh
c29uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
RGVmZXJyZWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVy
cmVkLmgKaW5kZXggMjZmNGE4MmQwOGNhMDIyMGVkZDUxOTY4NTI5ODIyYmNhYjlhYzZmZC4uMDky
MmE5NGQ5MzNjY2VjNTlhNGExN2ZjYmQyMmMzNzIzZGE1MGNlNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCkBAIC01Niw2ICs1Niwx
MCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWplY3QoRXhlY1N0YXRl
KiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWplY3QoRXhlY1N0YXRl
KiwgRXhjZXB0aW9uKik7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBwcm9taXNlQXN5bmNQ
ZW5kaW5nKCkgeyBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyA9IHRydWU7IH0KKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgSlNQcm9taXNlRGVmZXJyZWQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKQEAg
LTY0LDYgKzY4LDEwIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgSlNQcm9taXNlRGVmZXJy
ZWQoVk0mKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fcHJvbWlzZUlzQXN5bmNQZW5k
aW5nIHsgZmFsc2UgfTsKKyNlbmRpZgorCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3By
b21pc2U7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVzb2x2ZTsKICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gbV9yZWplY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1J1bkxvb3BUaW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY3YTljN2JlZjM0MWZiOWYwNDFm
Mzk1ZDUwYWM2MWY0OTc1YjUwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgorCisjaW5jbHVkZSAiR0NBY3Rp
dml0eUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJp
bmcuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8Z2xpYi5oPgorI2VuZGlmCisKK25h
bWVzcGFjZSBKU0MgeworCisjaWYgVVNFKENGKQorCitjb25zdCBDRlRpbWVJbnRlcnZhbCBKU1J1
bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKKworSlNSdW5M
b29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCisgICAgLCBt
X2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCit7CisgICAgc2V0UnVuTG9vcCh2bS0+aGVhcC5ydW5M
b29wKCkpOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJl
ZiBydW5Mb29wKQoreworICAgIGlmIChtX3J1bkxvb3ApIHsKKyAgICAgICAgQ0ZSdW5Mb29wUmVt
b3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOworICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90aW1lci5nZXQoKSk7
CisgICAgICAgIG1fcnVuTG9vcC5jbGVhcigpOworICAgICAgICBtX3RpbWVyLmNsZWFyKCk7Cisg
ICAgfQorCisgICAgaWYgKHJ1bkxvb3ApIHsKKyAgICAgICAgbV9ydW5Mb29wID0gcnVuTG9vcDsK
KyAgICAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BUaW1lckNvbnRl
eHQpKTsKKyAgICAgICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOworICAgICAgICBtX3RpbWVyID0g
YWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzX2RlY2Fk
ZSwgc19kZWNhZGUsIDAsIDAsIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRl
eHQpKTsKKyAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVy
LmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIH0KK30KKworSlNSdW5Mb29wVGlt
ZXI6On5KU1J1bkxvb3BUaW1lcigpCit7CisgICAgc2V0UnVuTG9vcCgwKTsKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250
ZXh0UHRyKQoreworICAgIEpTUnVuTG9vcFRpbWVyKiB0aW1lciA9IHN0YXRpY19jYXN0PEpTUnVu
TG9vcFRpbWVyKj4oY29udGV4dFB0cik7CisgICAgdGltZXItPm1fYXBpTG9jay0+bG9jaygpOwor
CisgICAgUmVmUHRyPFZNPiB2bSA9IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7CisgICAgaWYgKCF2
bSkgeworICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQg
anVzdCBnaXZlIHVwLgorICAgICAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bS5nZXQoKSk7CisgICAgICAgIHRpbWVyLT5kb1dvcmsoKTsKKyAgICB9CisKKyAgICB0aW1lci0+
bV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVU
aW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXRO
ZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBp
bnRlcnZhbEluU2Vjb25kcyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQg
SlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAgICBDRlJ1bkxvb3BUaW1lclNldE5l
eHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHNf
ZGVjYWRlKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gZmFsc2U7Cit9CisKKyNlbGlmIFVTRShHTElC
KQorCitjb25zdCBsb25nIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICogNjAgKiAyNCAq
IDM2NSAqIDEwOworCitzdGF0aWMgR1NvdXJjZUZ1bmNzIEpTUnVuTG9vcFRpbWVyU291cmNlRnVu
Y3Rpb25zID0geworICAgIG51bGxwdHIsIC8vIHByZXBhcmUKKyAgICBudWxscHRyLCAvLyBjaGVj
aworICAgIC8vIGRpc3BhdGNoCisgICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5jIGNhbGxiYWNr
LCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAgIHJldHVybiBj
YWxsYmFjayh1c2VyRGF0YSk7CisgICAgfSwKKyAgICBudWxscHRyLCAvLyBmaW5hbGl6ZQorICAg
IG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKKyAgICBudWxscHRyLCAvLyBjbG9zdXJlX21h
cnNoYWxsCit9OworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZtKQorICAg
IDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKKyAgICAsIG1fdGlt
ZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmSlNSdW5Mb29wVGltZXJTb3VyY2VGdW5jdGlvbnMs
IHNpemVvZihHU291cmNlKSkpKQoreworICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0
KCksICJbSmF2YVNjcmlwdENvcmVdIEpTUnVuTG9vcFRpbWVyIik7CisgICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVh
biB7CisgICAgICAgIGF1dG8mIHJ1bkxvb3BUaW1lciA9ICpzdGF0aWNfY2FzdDxKU1J1bkxvb3BU
aW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUocnVuTG9v
cFRpbWVyLm1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBKU1J1bkxvb3BU
aW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgICAgIHJ1bkxvb3BUaW1lci50
aW1lckRpZEZpcmUoKTsKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOworICAgIH0s
IHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyLmdldCgpLCBnX21h
aW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK0pTUnVuTG9vcFRpbWVyOjp+
SlNSdW5Mb29wVGltZXIoKQoreworICAgIGdfc291cmNlX2Rlc3Ryb3kobV90aW1lci5nZXQoKSk7
Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSgpCit7CisgICAgbV9hcGlM
b2NrLT5sb2NrKCk7CisKKyAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkgeworICAgICAgICAvLyBU
aGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAg
ICAgICBtX2FwaUxvY2stPnVubG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
eworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOworICAgICAgICBkb1dvcmsoKTsK
KyAgICB9CisKKyAgICBtX2FwaUxvY2stPnVubG9jaygpOworfQorCit2b2lkIEpTUnVuTG9vcFRp
bWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKK3sKKyAgICBnX3Nv
dXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgp
ICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgbV9pc1NjaGVkdWxl
ZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAg
ICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNf
dGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgbV9pc1NjaGVkdWxlZCA9
IGZhbHNlOworfQorI2Vsc2UKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihWTSogdm0p
CisgICAgOiBtX3ZtKHZtKQoreworfQorCitKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVy
KCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSgpCit7Cit9CisKK3Zv
aWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlKQoreworfQorCit2b2lkIEpT
UnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cit9CisjZW5kaWYKKyAgICAKK30gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNS
dW5Mb29wVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODNlY2I5Y2JjNDNiODBkMzFlZjhiNmIwNDljMTdlZjVhYzRmY2I4
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVu
TG9vcFRpbWVyLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9u
L0NvcmVGb3VuZGF0aW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNM
b2NrOworY2xhc3MgVk07CisKK2NsYXNzIEpTUnVuTG9vcFRpbWVyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPEpTUnVuTG9vcFRpbWVyPiB7CitwdWJsaWM6CisgICAgSlNSdW5Mb29wVGlt
ZXIoVk0qKTsKKyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIHZvaWQgdGltZXJEaWRGaXJlKENGUnVu
TG9vcFRpbWVyUmVmLCB2b2lkKik7CisjZW5kaWYKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZp
cnR1YWwgfkpTUnVuTG9vcFRpbWVyKCk7CisgICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsK
KworICAgIHZvaWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOworICAg
IHZvaWQgY2FuY2VsVGltZXIoKTsKKyAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1NjaGVkdWxlZDsgfQorCisjaWYgVVNFKENGKQorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYpOworI2VuZGlmIC8vIFVTRShDRikKKworcHJv
dGVjdGVkOgorICAgIFZNKiBtX3ZtOworCisgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwor
ICAgIGJvb2wgbV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07CisjaWYgVVNFKENGKQorICAgIHN0YXRp
YyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKKworICAgIFJldGFpblB0cjxDRlJ1bkxv
b3BUaW1lclJlZj4gbV90aW1lcjsKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3J1bkxv
b3A7CisKKyAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OworCisgICAgTG9jayBt
X3NodXRkb3duTXV0ZXg7CisjZWxpZiBVU0UoR0xJQikKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBz
X2RlY2FkZTsKKyAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOworICAgIEdSZWZQdHI8R1NvdXJjZT4g
bV90aW1lcjsKKyNlbmRpZgorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
K307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAppbmRleCBkYTk5NmVhYTNjNmNjYjYwYmYxMDhiNjk5NzM4NDI2ZjcxYTQ5Njdj
Li5hMGQ5MTA5MGU2MmJjZGIyNjYxYzI4NmQzNDQ2NzI3YzkxNTE0ZTY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC0yNTIsNiArMjUyLDcgQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZGVExDb21w
aWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoOCwgMikgLSAxLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZERkdDb21waWxlclRo
cmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAwKSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mRlRMQ29tcGlsZXJUaHJl
YWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMiwgMCksIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZldhc21Db21waWxlclRocmVh
ZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAwKSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlUHJvZmlsZXIsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlciwg
dHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkBAIC00MjgsNiArNDI5LDkgQEAgdHlwZWRlZiBjb25z
dCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VDb2RlQ2FjaGUsIHRydWUsIE5v
cm1hbCwgIklmIGZhbHNlLCB0aGUgdW5saW5rZWQgYnl0ZSBjb2RlIGNhY2hlIHdpbGwgbm90IGJl
IHVzZWQuIikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5LCB0cnVlLCBOb3Jt
YWwsICJFeHBvc2UgdGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBvYmplY3QuIikgXAorICAgIFwKKyAg
ICB2KGJvb2wsIGZhaWxUb0NvbXBpbGVXZWJBc3NlbWJseUNvZGUsIGZhbHNlLCBOb3JtYWwsICJJ
ZiB0cnVlLCBubyBXYXNtOjpQbGFuIHdpbGwgc3VjZXNzZnVsbHkgY29tcGlsZSBhIGZ1bmN0aW9u
LiIpIFwKKyAgICBcCiAgICAgdihib29sLCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5LCBm
YWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd29uJ3QgbW1hcCB0aGUg
ZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5kIGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0aGUgbWluaW11
bSByZXF1aXJlZCBhbW91bnQuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVt
b3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQg
YWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20g
bWVtb3J5LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdFRMUywgdHJ1ZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGZhc3QgdGhyZWFkLWxvY2FsIHN0b3Jh
Z2UgaWYgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjIyZDI3MmQ0MDNlZDc3MDA5NmE5NDBmOThjZTYyYTRkNzllZmNjOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJl
ZFRpbWVyLmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9taXNl
RGVmZXJyZWRUaW1lci5oIgorCisjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNs
dWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKworUHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKFZN
JiB2bSkKKyAgICA6IEJhc2UoJnZtKQoreworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVy
Ojpkb1dvcmsoKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKKyAgICBjYW5jZWxU
aW1lcigpOworICAgIGlmICghbV9ydW5UYXNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hp
bGUgKCFtX3Rhc2tzLmlzRW1wdHkoKSkgeworICAgICAgICBKU1Byb21pc2VEZWZlcnJlZCogdGlj
a2V0OworICAgICAgICBUYXNrIHRhc2s7CisgICAgICAgIHN0ZDo6dGllKHRpY2tldCwgdGFzaykg
PSBtX3Rhc2tzLnRha2VMYXN0KCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJEb2lu
ZyB3b3JrIG9uIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAgICAgICAgLy8g
V2UgbWF5IGhhdmUgYWxyZWFkeSBjYW5jZWxlZCB0aGVzZSBwcm9taXNlcy4KKyAgICAgICAgaWYg
KG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCkpIHsKKyAgICAgICAgICAgIHRhc2so
KTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWljcm90YXNrcygpOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byB3YWl0aW5nVGFza3MgPSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7Cisg
ICAgICAgIGZvciAoY29uc3QgVGFzayYgdW5ibG9ja2VkVGFzayA6IHdhaXRpbmdUYXNrcykgewor
ICAgICAgICAgICAgdW5ibG9ja2VkVGFzaygpOworICAgICAgICAgICAgbV92bS0+ZHJhaW5NaWNy
b3Rhc2tzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBVU0UoQ0YpCisgICAgaWYgKG1fcGVu
ZGluZ1Byb21pc2VzLmlzRW1wdHkoKSAmJiBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFByb21p
c2VzRmluaXNoKQorICAgICAgICBDRlJ1bkxvb3BTdG9wKG1fcnVuTG9vcC5nZXQoKSk7CisjZW5k
aWYKK30KKworI2lmIFVTRShDRikKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OnJ1blJ1bkxv
b3AoKQoreworICAgIEFTU0VSVCghbV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CisgICAgQVNTRVJUKENGUnVuTG9vcEdldEN1cnJlbnQoKSA9PSBtX3J1bkxvb3AuZ2V0KCkp
OworICAgIG1fc2hvdWxkU3RvcFJ1bkxvb3BXaGVuQWxsUHJvbWlzZXNGaW5pc2ggPSB0cnVlOwor
ICAgIENGUnVuTG9vcFJ1bigpOworfQorI2VuZGlmCisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGlt
ZXI6OmFkZFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFZlY3RvcjxT
dHJvbmc8SlNDZWxsPj4mJiBkZXBlbmRlbmNpZXMpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkZXBlbmRlbmNpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIEFTU0VSVChkZXBlbmRlbmNpZXNb
aV0uZ2V0KCkgIT0gdGlja2V0KTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlz
ZXMuYWRkKHRpY2tldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PigpKTsKKyAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcg
cGVuZGluZyBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICBkZXBlbmRl
bmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KCptX3ZtLCB0aWNrZXQpKTsKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUoZGVwZW5kZW5jaWVzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQWRkaW5nIG5ldyBkZXBlbmRlbmNpZXMg
Zm9yIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kVmVjdG9yKGRlcGVuZGVuY2llcyk7CisgICAgfQorCisjaWZuZGVm
IE5ERUJVRworICAgIHRpY2tldC0+cHJvbWlzZUFzeW5jUGVuZGluZygpOworI2VuZGlmCit9CisK
K2Jvb2wgUHJvbWlzZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKEpTUHJvbWlz
ZURlZmVycmVkKiB0aWNrZXQpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOworICAgIGJvb2wgcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMucmVt
b3ZlKHRpY2tldCk7CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiQ2FuY2VsaW5nIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAgICBh
dXRvIGJsb2NrZWRUYXNrcyA9IG1fYmxvY2tlZFRhc2tzLnRha2UodGlja2V0KTsKKyAgICBmb3Ig
KGNvbnN0IFRhc2smIHRhc2sgOiBibG9ja2VkVGFza3MpCisgICAgICAgIHRhc2soKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdv
cmtTb29uKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFRhc2smJiB0YXNrKQoreworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fdGFza0xvY2spOworICAgIG1fdGFza3MuYXBwZW5kKHN0ZDo6bWFr
ZV90dXBsZSh0aWNrZXQsIFdURk1vdmUodGFzaykpKTsKKyAgICBpZiAoIWlzU2NoZWR1bGVkKCkp
CisgICAgICAgIHNjaGVkdWxlVGltZXIoMCk7Cit9CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGlt
ZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2soSlNQcm9taXNlRGVmZXJyZWQqIGJsb2NraW5nVGlja2V0
LCBUYXNrJiYgdGFzaykKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKGJsb2Nr
aW5nVGlja2V0KSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Jsb2NrZWRUYXNrcy5hZGQoYmxvY2tp
bmdUaWNrZXQsIFZlY3RvcjxUYXNrPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChXVEZNb3ZlKHRhc2spKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NWVmN2UxZjFjNzA3ZjQ4MTQxYWRjMjdlNWM0Yjk4MWJlNzY3Y2RhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVk
VGltZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5o
IgorI2luY2x1ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CitjbGFzcyBWTTsKK2NsYXNzIEpTQ2VsbDsK
KworY2xhc3MgUHJvbWlzZURlZmVycmVkVGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNSdW5Mb29wVGltZXIgQmFzZTsKKworICAgIFByb21pc2VE
ZWZlcnJlZFRpbWVyKFZNJik7CisKKyAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOworCisgICAg
dm9pZCBhZGRQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8
SlNDZWxsPj4mJiBkZXBlbmRlbmNpZXMpOworICAgIC8vIEpTUHJvbWlzZURlZmVycmVkIHNob3Vs
ZCBoYW5kbGUgY2FuY2VsaW5nIHdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0
ZWQuCisgICAgYm9vbCBjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCopOwor
CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gVGFzazsKKyAgICB2b2lkIHNjaGVk
dWxlV29ya1Nvb24oSlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrJiYpOworCisgICAgLy8gQmxvY2tl
ZCB0YXNrcyBzaG91bGQgb25seSBiZSByZWdpc3RlcmVkIHdoaWxlIGhvbGRpbmcgdGhlIEpTIEFQ
SSBsb2NrLiBJZiB3ZSBkaWRuJ3QgcmVxdWlyZSBob2xkaW5nIHRoZQorICAgIC8vIEpTIEFQSSBs
b2NrIHRoZW4gdGhlcmUgbWlnaHQgYmUgYSByYWNlIHdoZXJlIHRoZSBwcm9taXNlIHlvdSBhcmUg
d2FpdGluZyBvbiBpcyBydW4gYmVmb3JlIHlvdXIgdGFzayBpcworICAgIC8vIHJlZ2lzdGVyZWQu
CisgICAgdm9pZCBzY2hlZHVsZUJsb2NrZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiwgVGFzayYm
KTsKKworICAgIHZvaWQgc3RvcFJ1bm5pbmdUYXNrcygpIHsgbV9ydW5UYXNrcyA9IGZhbHNlOyB9
CisjaWYgVVNFKENGKQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuUnVuTG9vcCgpOwor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxKU1Byb21pc2VEZWZlcnJlZCosIFZlY3Rv
cjxTdHJvbmc8SlNDZWxsPj4+IG1fcGVuZGluZ1Byb21pc2VzOworICAgIExvY2sgbV90YXNrTG9j
azsKKyAgICBib29sIG1fcnVuVGFza3MgeyB0cnVlIH07CisjaWYgVVNFKENGKQorICAgIGJvb2wg
bV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9taXNlc0ZpbmlzaCB7IGZhbHNlIH07CisjZW5k
aWYKKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxKU1Byb21pc2VEZWZlcnJlZCosIFRhc2s+PiBtX3Rh
c2tzOworICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8VGFzaz4+IG1fYmxv
Y2tlZFRhc2tzOworfTsKKworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCmluZGV4IDg1MTE1NDJiNzdkZmM4ZTZmMmJlYWJmMWY4OTNjNzczOWFi
NzRiMzguLmZlZTBiMzM5ZWYyNTcyYTVhZWQxMWRiODZhMTExNGM0NDZhMTliN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJQ
YXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jh
bUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2lu
Y2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgpAQCAtMTAzLDYgKzEwNCw3IEBACiAjaW5jbHVkZSAiVW5s
aW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJW
TUluc3BlY3Rvci5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldhdGNo
ZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBE
YXRhLmgiCkBAIC0xNzcsNiArMTc5LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwgdG9wVk1FbnRyeUZyYW1lKG51
bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAgICwg
cHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1l
cj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/
IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0cmluZ1Rh
YmxlKQogICAgICwgcHJvcGVydHlOYW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBB
cmdMaXN0KQpAQCAtMzU2LDYgKzM1OSwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAKIFZNOjp+Vk0oKQogeworICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5z
dG9wUnVubmluZ1Rhc2tzKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChXYXNt
OjpleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCkpCisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0
KCkuc3RvcEFsbFBsYW5zRm9yVk0oKnRoaXMpOworI2VuZGlmCiAgICAgaWYgKFVOTElLRUxZKG1f
d2F0Y2hkb2cpKQogICAgICAgICBtX3dhdGNoZG9nLT53aWxsRGVzdHJveVZNKHRoaXMpOwogICAg
IG1fdHJhcHMud2lsbERlc3Ryb3lWTSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5k
ZXggOWQ4NmFhMTlhOTMzY2VhMzhhYjVmMDIzMTg0NDU5Y2I2MDEwZjNiNy4uODFiODJlOTlhOTRk
ZWRiM2MzYTFjN2MyNjM2OWY2YmMyZjIwOTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCkBAIC0xMDYsNiArMTA2LDcgQEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVF
eGVjdXRhYmxlOworY2xhc3MgUHJvbWlzZURlZmVycmVkVGltZXI7CiBjbGFzcyBSZWdFeHBDYWNo
ZTsKIGNsYXNzIFJlZ2lzdGVyOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CkBAIC0zODAs
NiArMzgxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6b25jZV9mbGFnIG1fd2FzbVNpZ25hdHVyZUlu
Zm9ybWF0aW9uT25jZUZsYWc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uPiBtX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxQcm9taXNlRGVmZXJyZWRUaW1lcj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAg
ICAgCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwogICAg
IGNvbnN0IENsYXNzSW5mbyogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENsYXNz
SW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1i
bHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKaW5k
ZXggZmNkYzhjZGRjNGRhNjhkZDlkY2UxOTkwZDlkOTkxMmVkZDI5ZDY2OC4uYjU0MmI5MzMxNjli
MDI0Mjk3ODA3ZGJmOGQ0YWNmNzZmOTE3MTEzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXZWJBc3NlbWJseS5jcHAKQEAgLTMzLDEwICszMywxNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKKyNpbmNsdWRlICJT
dHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29y
a2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKK3Vz
aW5nIEpTQzo6V2FzbTo6UGxhbjsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dlYkFzc2VtYmx5KTsKQEAgLTQ1LDQ1ICs1Miwx
NjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVu
YyhFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlD
b21waWxlRnVuYyhFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2Vi
QXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlLCBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZSkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNh
dGNoU2NvcGUuZXhjZXB0aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgY2F0Y2hT
Y29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRp
b24tPnZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlz
ZSgpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBp
bGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJv
bm91czoKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
MDE2Ci0gICAgSlNWYWx1ZSBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpj
cmVhdGVNb2R1bGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICBjYXRjaFNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNl
cHRpb24tPnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2Ut
PnByb21pc2UoKSk7Ci0gICAgfQorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3Jl
YXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFZlY3RvcjxTdHJvbmc8
SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpT
Q2VsbD4odm0sIGdsb2JhbE9iamVjdCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5h
ZGRQZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAg
UmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46OlZh
bGlkYXRpb24sIFtzb3VyY2UsIHByb21pc2UsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFi
bGUgeworICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBs
YW4tPnZtKCkucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwg
W3NvdXJjZSwgcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1Zh
bHVlIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGds
b2JhbE9iamVjdC0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3VyY2Up
LCBXVEZNb3ZlKHBsYW4pKTsKKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewor
ICAgICAgICAgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgcHJvbWlzZS0+cmVzb2x2ZShleGVj
LCBtb2R1bGUpOworICAgICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOwor
ICAgICAgICB9KTsKKyAgICB9KSk7CisKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVl
dWUoV1RGTW92ZShwbGFuKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5w
cm9taXNlKCkpOwogfQogCitlbnVtIGNsYXNzIFJlc29sdmUgeyBXaXRoSW5zdGFuY2UsIFdpdGhN
b2R1bGVBbmRJbnN0YW5jZSB9Oworc3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgUmVzb2x2ZSBlbnRyaWVz
KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBpbnN0
YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYyk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZW50cmllcyA9PSBSZXNvbHZlOjpXaXRoSW5zdGFuY2Up
CisgICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgaW5zdGFuY2UpOworICAgIGVsc2Ugewor
ICAgICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cisg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
QVNDSUlMaXRlcmFsKCJtb2R1bGUiKSksIG1vZHVsZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5j
ZSIpKSwgaW5zdGFuY2UpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAvLyBJbiBvcmRlciB0byBh
dm9pZCBwb3RlbnRpYWxseSByZWNvbXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgYWxsb2NhdGUg
aXRzIGdhdGhlciBhbGwgdGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJpb3IgdG8KKyAg
ICAvLyBnZW5lcmF0aW5nIGFueSBjb2RlLiBJZiB3ZSBkaWRuJ3QgZG8gdGhpcyB3ZSBtaWdodCBj
aG9vc2UgdG8gY29tcGlsZSB3aXRoIFNpZ25hbGluZyBtZW1vcnkgYnV0IGFjdHVhbGx5IGdldCBh
IEJvbnVkcyBDaGVja2luZworICAgIC8vIG1lbW9yeSB0aGVuIGhhdmUgdG8gcmVjb21waWxlLgor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBpZiAo
c2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3Nz
aWJsZSBjYXNlczoKKyAgICAvLyAxKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gaW5pdGlh
bGl6ZWQgQ29kZUJsb2NrLCBzbyB3ZSBoYXZlIG5vIG1vcmUgd29yayB0byBkby4KKyAgICAvLyAy
KSBUaGUgaW5zdGFuY2UgaGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBh
bmQgY29tcGlsZSB0aGUgY29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVh
ZHkgaGFzIGFuIHVuaW5pdGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyBzb21lb25lIGVsc2UgaXMgY29t
cGlsaW5nIGNvZGUgYW5kIHdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciB0aGVtLgorCisgICAgaWYg
KGluc3RhbmNlLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHBy
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgLy8gVGhl
IGluc3RhbmNlIGtlZXBzIHRoZSBtb2R1bGUgYWxpdmUuCisgICAgZGVwZW5kZW5jaWVzLmFwcGVu
ZChTdHJvbmc8SlNDZWxsPih2bSwgaW5zdGFuY2UpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRU
aW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsK
KworICAgIGlmIChpbnN0YW5jZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgdm0ucHJvbWlzZURl
ZmVycmVkVGltZXItPnNjaGVkdWxlQmxvY2tlZFRhc2soaW5zdGFuY2UtPmNvZGVCbG9jaygpLT5w
bGFuKCkucGVuZGluZ1Byb21pc2UoKSwgWyZ2bSwgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
ZW50cmllc10gKCkgeworICAgICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2Ut
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNl
LCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOworCisgICAgLy8g
RklYTUU6IFRoaXMgcmVwYXJzZXMgdGhlIG1vZHVsZSBoZWFkZXIsIHdoaWNoIHNob3VsZG4ndCBi
ZSBuZWNlc3NhcnkuCisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0s
IG1vZHVsZS0+c291cmNlKCksIFBsYW46OkZ1bGxDb21waWxlLCBbcHJvbWlzZSwgaW5zdGFuY2Us
IG1vZHVsZSwgZW50cmllc10gKFBsYW4mIHApIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4g
PSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5z
Y2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRy
aWVzLCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgeworICAgICAgICAgICAgVk0mIHZtID0gcGxh
bi0+dm0oKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJv
bWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllcyk7CisgICAgICAgIH0pOworICAgIH0pKTsK
KworICAgIGluc3RhbmNlLT5hZGRVbml0aWFsaXplZENvZGVCbG9jayh2bSwgcGxhbi5jb3B5UmVm
KCkpOworICAgIHBsYW4tPnNldE1vZGUoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSk7CisgICAgV2Fz
bTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworfQorCitzdGF0aWMg
dm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJv
bWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9i
amVjdCkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUo
dm0sIGV4ZWMsIGJ1ZmZlcik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKKwor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKwor
ICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIGRlcGVuZGVuY2ll
cy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkpOworICAgIHZtLnByb21p
c2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVu
ZGVuY2llcykpOworCisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0s
ICpzb3VyY2UsIFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHByb21pc2UsIGltcG9ydE9iamVj
dCwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRU
aW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBwcm9taXNlLCBpbXBvcnRP
YmplY3QsIGdsb2JhbE9iamVjdCwgcGxhbiA9IFdURk1vdmUocGxhbildICgpIG11dGFibGUgewor
ICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywg
Z2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJj
ZSksIHBsYW4uY29weVJlZigpKTsKKyAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkg
eworICAgICAgICAgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnN0YW50aWF0
ZSh2bSwgZXhlYywgcHJvbWlzZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhN
b2R1bGVBbmRJbnN0YW5jZSk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIFdhc206OmVu
c3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKK30KKwogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgQVBJIHRy
dWx5IGFzeW5jaHJvbm91czogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2OTE4NwotCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIGF1
dG8gcmVqZWN0ID0gWyZdICgpIHsKLSAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRj
aFNjb3BlLmV4Y2VwdGlvbigpOwotICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICAgICAg
Y2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhl
YywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
cm9taXNlLT5wcm9taXNlKCkpOwotICAgIH07Ci0KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50
ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9y
dEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmlu
ZWQoKSAmJiAhaW1wb3J0T2JqZWN0KSB7CkBAIC05MywyOSArMjE3LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBl
eGVjKQogICAgIH0KIAogICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwotICAgIEpTVmFsdWUgbW9kdWxlOwotICAgIGJvb2wgZmlyc3RBcmd1bWVudElzTW9kdWxl
ID0gZmFsc2U7Ci0gICAgaWYgKGZpcnN0QXJndW1lbnQuaW5oZXJpdHModm0sIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmluZm8oKSkpIHsKLSAgICAgICAgZmlyc3RBcmd1bWVudElzTW9kdWxlID0gdHJ1
ZTsKLSAgICAgICAgbW9kdWxlID0gZmlyc3RBcmd1bWVudDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtb2R1bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhl
YywgZmlyc3RBcmd1bWVudCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICAgICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KCk7Ci0gICAgfQotCi0gICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSA9IFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlSW5zdGFuY2UoZXhlYywganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihtb2R1bGUpLCBp
bXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0
YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIHJlamVjdCgpOwotCi0gICAgaWYgKGZpcnN0QXJndW1lbnRJc01vZHVsZSkKLSAg
ICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBpbnN0YW5jZSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJ
SUxpdGVyYWwoIm1vZHVsZSIpKSwgbW9kdWxlKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikp
LCBpbnN0YW5jZSk7Ci0gICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKLSAg
ICB9CisgICAgaWYgKGF1dG8qIG1vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1v
ZHVsZSo+KHZtLCBmaXJzdEFyZ3VtZW50KSkKKyAgICAgICAgaW5zdGFudGlhdGUodm0sIGV4ZWMs
IHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpOwor
ICAgIGVsc2UKKyAgICAgICAgY29tcGlsZUFuZEluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNl
LCBmaXJzdEFyZ3VtZW50LCBpbXBvcnRPYmplY3QpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQpAQCAtMTI5LDcgKzIzNCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBl
eGVjKQogICAgIHNpemVfdCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1
ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNp
emUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIFdhc206OlBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7Cisg
ICAgV2FzbTo6UGxhbiBwbGFuKHZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBsYW46
OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0
IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNv
bWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2MDE1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxh
bi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCBmZThjM2YzYmEyMGE2ZmU2
ODE1ZWIxNDQwYTU3ZmJkYzIyOWJmZDljLi4wOGFiZGJjMDIxYjgxOGMzOTU1OTYxNjlhMWNkYTI0
NWRlOThlNTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0NlbGwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiUHJvbWlzZURl
ZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5j
bHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTM5LDE0ICs0MCwx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBK
U1dlYkFzc2VtYmx5TWVtb3J5OwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBQbGFuOworfQor
CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZv
cywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlN
b2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgV2Fz
bTo6TWVtb3J5TW9kZSBtb2RlLCBSZWY8V2FzbTo6UGxhbj4mJiBwbGFuLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCkKICAgICB7Ci0gICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXpl
KGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVyLCBzdGQ6OmZv
cndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2RlLCBjYWxsZWVDb3VudCk7
CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkp
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVyLCBtb2RlLCBXVEZNb3ZlKHBsYW4pLCBj
YWxsZWVDb3VudCk7CiAgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTU5LDcgKzY0LDE2IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtRXhpdFN0
dWJzLnNpemUoKTsgfQogICAgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kZTsgfQogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5
TWVtb3J5Kik7CisKKyAgICAvLyBEb24ndCBjYWxsIGludGlhbGl6ZSBkaXJlY3RseSwgdGhpcyBz
aG91bGQgYmUgY2FsbGVkIGZvciB5b3UsIGFzIG5lZWRlZCwgYnkgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpmaW5hbGl6ZUNyZWF0aW9uLgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIGJvb2wg
aW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhbV9wbGFuOyB9CisKKyAgICBXYXNtOjpQbGFu
JiBwbGFuKCkgY29uc3QgeyBBU1NFUlQoIWluaXRpYWxpemVkKCkpOyByZXR1cm4gKm1fcGxhbjsg
fQorCisgICAgYm9vbCBydW5uYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGluaXRpYWxpemVkKCkgJiYg
IW1fZXJyb3JNZXNzYWdlOyB9CisgICAgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSB7IEFTU0VSVCgh
cnVubmFibGUoKSk7IHJldHVybiBtX2Vycm9yTWVzc2FnZTsgfQorICAgIGJvb2wgaXNTYWZlVG9S
dW4oSlNXZWJBc3NlbWJseU1lbW9yeSopIGNvbnN0OwogCiAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCiAgICAgewpAQCAtODksMTAgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBj
YWxsZWUpOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiog
Y2FsbGVlcygpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZkNhbGxlZXMoKSk7Ci0gICAgfQorICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2Fs
bGVlPiogY2FsbGVlcygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxs
ZWVzKCkpOyB9CiAKICAgICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVk
IGltcG9ydEluZGV4KQogICAgIHsKQEAgLTEwMSw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5
TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+
JiYsIFdhc206Ok1lbW9yeU1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKKyAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdhc206Ok1lbW9yeU1v
ZGUsIFJlZjxXYXNtOjpQbGFuPiYmLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7CiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpAQCAtMTI1LDYgKzEzNiw5
IEBAIHByaXZhdGU6CiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXI7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZl
Y3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7CisgICAgLy8gVGhlIHBs
YW4gdGhhdCBpcyBjb21waWxpbmcgdGhpcyBjb2RlIGJsb2NrLgorICAgIFJlZlB0cjxXYXNtOjpQ
bGFuPiBtX3BsYW47CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIFdhc206Ok1lbW9y
eU1vZGUgbV9tb2RlOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IGZhYzU3
YWRkYWYwNzRlOWE4Y2ZlNjA2MzMzNWYzMGRhMmU5NmQzYTIuLmFiNzIwMGVkZDUzMDRmYTJhY2Jk
NDk5ZDgwNWYzZDFkOTZhMTZjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdo
aWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mKTsKKyAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSopOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAg
LTIyMSw2ICsyMjEsNyBAQCBwcml2YXRlOgogCiAgICAgVk0mIG1fdm07CiAgICAgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBNZW1vcnlNb2RlIG1fbW9kZTsKICAgICBQcm9j
ZWR1cmUmIG1fcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBWZWN0
b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKQEAgLTI1OCw5ICsyNTksMTAgQEAgc3RhdGljIHZvaWQg
c3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1
ZSogYXJnKQogICAgICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihW
TSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlN
b2RlIG1vZGUpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9pbmZvKGluZm8pCisgICAgLCBtX21v
ZGUobW9kZSkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogewpAQCAtNDg2LDcgKzQ4OCw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21lbW9y
eUJhc2VHUFIpOwotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZykgeworICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpIHsKICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VS
VChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBw
b2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOwpA
QCAtNTIyLDcgKzUyNCw3IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlw
ZSBvcCkKIAogaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9w
Y29kZSBtZW1vcnlPcCkKIHsKLSAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKQorICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5n
KQogICAgICAgICByZXR1cm4gdHJhcHBpbmcobWVtb3J5T3ApOwogICAgIHJldHVybiBtZW1vcnlP
cDsKIH0KQEAgLTEyMjgsNyArMTIzMCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAgICAg
aml0LnJldCgpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIHVuc2lnbmVkIG9wdExl
dmVsKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0
aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9u
TGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUlu
ZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVk
IG9wdExldmVsKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50
ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTIzNiw3ICsxMjM4LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Vk0mIHZtLAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6
bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigmdm0pOwogCiAgICAgUHJvY2VkdXJlIHByb2NlZHVy
ZTsKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyk7CisgICAgQjNJUkdlbmVyYXRvciBjb250
ZXh0KHZtLCBpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIG1vZGUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcigm
dm0sIGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGlu
Zm8sIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKICAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggMjQ5ZDU3ODE0
YTkyOGM0YmY5MjA2YmM4NTI1NjRjMzZjNzg4OWE0ZS4uZGU1NmExYzNiMjNjNTcwNGZlMDUzMTli
ZDBhODVjMzFlNzdmOWEzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBleHRlcm4gIkMiIHZv
aWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CkBAIC00Nyw3ICs0OCw3IEBAIHN0cnVjdCBDb21waWxh
dGlvbkNvbnRleHQgewogICAgIENDYWxsSGVscGVyczo6Q2FsbCBqc0VudHJ5cG9pbnRUb1dhc21F
bnRyeXBvaW50Q2FsbDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250
ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBW
ZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK0V4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwg
Y29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgTWVtb3J5
TW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDlhN2E2NzI5
YTcxZmJkZjA1MTc0YTFjY2MxMWE1NmY2MjcxZGNlYmMuLjU1Njk0MzVmNDEyZTY2YTZkNzQ4YzMz
NThiYmQxNTM1MWNlNTIyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmgKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0
cmluZyhFeHRlcm5hbEtpbmQga2luZCkKIH0KIAogc3RydWN0IEltcG9ydCB7Ci0gICAgSWRlbnRp
ZmllciBtb2R1bGU7Ci0gICAgSWRlbnRpZmllciBmaWVsZDsKKyAgICBTdHJpbmcgbW9kdWxlOwor
ICAgIFN0cmluZyBmaWVsZDsKICAgICBFeHRlcm5hbEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBr
aW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2lu
ZC4KIH07CiAKIHN0cnVjdCBFeHBvcnQgewotICAgIElkZW50aWZpZXIgZmllbGQ7CisgICAgU3Ry
aW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJbmRl
eDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsK
QEAgLTI2MCw2ICsyNjAsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIH0KIAog
ICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMuc2l6ZSgpOyB9CiAKICAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IGYyYjk0
MTE1Y2I2NGY2N2M2YjU4NjFkZWRjOGMyYjk1MzdjNzNiYTIuLmQ0MjA1NjBiNzI0ZTRiNDY1NWQy
NmFhY2NjN2Q0Y2UyMWFkNGNhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC0xMTUsNyArMTE1LDcgQEAgYXV0byBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIobnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9u
J3MgbnVtYmVyIG9mIGxvY2FscyBpbiBncm91cCAiLCBpKTsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihudW1iZXJPZkxvY2FscyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3MgIiwgaSwgInRoIGxvY2FsIGdyb3VwIGNvdW50IGlz
IHRvbyBiaWcgIiwgbnVtYmVyT2ZMb2NhbHMpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2NhbCksICJjYW4ndCBnZXQgRnVuY3Rpb24gbG9jYWwn
cyB0eXBlIGluIGdyb3VwICIsIGkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2Nv
bnRleHQuYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9mTG9jYWxzKSwgImNhbid0IGFkZCAi
LCBudW1iZXJPZkxvY2FscywgIiBGdW5jdGlvbiBsb2NhbHMgZnJvbSBncm91cCAiLCBpKTsKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJl
ck9mTG9jYWxzKSk7CiAgICAgfQogCiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZUJvZHkoKSk7CkBAIC0yNjcsNyArMjY3LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICB1
aW50MzJfdCBpbmRleDsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5k
ZXggZm9yIGdldF9sb2NhbCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRl
eHQuZ2V0TG9jYWwoaW5kZXgsIHJlc3VsdCksICJjYW4ndCBnZXRfbG9jYWwgYXQgaW5kZXgiLCBp
bmRleCk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldExvY2FsKGluZGV4LCBy
ZXN1bHQpKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtMzA0LDcgKzMwNCw3IEBAIGF1dG8gRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAi
Y2FuJ3QgZ2V0IHNldF9nbG9iYWwncyBpbmRleCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQ
UkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2dsb2JhbCB2YWx1ZSIpOwogICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChzZXRHbG9iYWwoaW5kZXgsIHZhbHVlKSk7Ci0gICAgICAg
IHJldHVybiBtX2NvbnRleHQuc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgY2FzZSBDYWxsOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmgKaW5kZXggZDEzZDBjNjYyZjk4OWQzZWRlNGU0ZGUwOWYyMjQ2Y2M3OTc2
NmE5Yi4uNDRkYTBkZmMxNzg0ZGRmNWMwMGQ3YmI1OTQ2MzA2YWU2MGEyYjI1YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBW
TTsKIG5hbWVzcGFjZSBXYXNtIHsKIAogLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVy
IG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2
OTMKLWVudW0gY2xhc3MgTWVtb3J5TW9kZSB7CitlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50
OF90IHsKICAgICBCb3VuZHNDaGVja2luZywKICAgICBTaWduYWxpbmcsCiAgICAgTnVtYmVyT2ZN
ZW1vcnlNb2RlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggOGFjMDg2NjI3OGI1MTM5M2I2NjllYTA5YTdiNTQ4ZDZk
OWE3NmIxNC4uNTkwOWZlM2ZlODNjMTg4Mjg5MjU0MzRkZTY1NmFkYWEwMTQxNzcyYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwCkBAIC03NCw3ICs3NCw3IEBAIFBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJ
bmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpCiB7CiB9CiAKLU1l
bW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZWNvbXBp
bGVNb2RlLCBib29sIGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0
aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCkK
ICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAg
LCBtX2lzSW1wb3J0KGlzSW1wb3J0KQpAQCAtODIsMjggKzgyLDYgQEAgTWVtb3J5SW5mb3JtYXRp
b246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXUKICAgICBSRUxFQVNFX0FTU0VSVCghIW1faW5pdGlhbCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fbWF4aW11bSB8fCBtX21heGltdW0gPj0gbV9pbml0aWFsKTsKICAgICBBU1NFUlQo
ISEqdGhpcyk7Ci0KLSAgICBpZiAoIXJlY29tcGlsZU1vZGUpIHsKLSAgICAgICAgaWYgKCFpc0lt
cG9ydCkgewotICAgICAgICAgICAgaWYgKG1heGltdW0gJiYgbWF4aW11bS5ieXRlcygpID09IDAp
IHsKLSAgICAgICAgICAgICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0s
IGluaXRpYWwsIG1heGltdW0sIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Jlc2VydmVkTWVtb3J5KTsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3Jlc2VydmVkTWVtb3J5LT5tYXhpbXVtKCkpOwotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKS5ieXRlcygp
ID09IDApOwotICAgICAgICAgICAgICAgIG1fbW9kZSA9IG1fcmVzZXJ2ZWRNZW1vcnktPm1vZGUo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwg
TWVtb3J5TW9kZTo6U2lnbmFsaW5nKTsKLSAgICAgICAgICAgIGlmIChtX3Jlc2VydmVkTWVtb3J5
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAg
ICAgICAgICAgIG1fbW9kZSA9IG1fcmVzZXJ2ZWRNZW1vcnktPm1vZGUoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9tb2RlID0g
TWVtb3J5OjpsYXN0QWxsb2NhdGVkTW9kZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX21vZGUg
PSAqcmVjb21waWxlTW9kZTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5k
ZXggNmRlMDcwYTEwNDUyZmY2YmIzYzVjMjUwNDExZjEwZTkxMzg5ZTRhMi4uZDE4MmM3M2NkNjUz
ODhjYWQ2NTlmNTdmYWUwYzMyODMzZGVhZWNmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTU0LDIyICs1NCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVCghKnRoaXMpOwogICAgIH0KIAotICAgIE1lbW9yeUluZm9y
bWF0aW9uKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9w
dGlvbmFsPE1lbW9yeU1vZGU+LCBib29sIGlzSW1wb3J0KTsKKyAgICBNZW1vcnlJbmZvcm1hdGlv
bihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQpOwog
CiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAg
ICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIGJv
b2wgaGFzUmVzZXJ2ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5OyB9
Ci0gICAgUmVmUHRyPE1lbW9yeT4gdGFrZVJlc2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVz
ZXJ2ZWRNZW1vcnkoKSk7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5LnJlbGVhc2UoKTsgfQotICAg
IE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNJ
bXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0OyB9CiAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2luaXRpYWw7IH0KIAogcHJpdmF0ZToKLSAg
ICBSZWZQdHI8TWVtb3J5PiBtX3Jlc2VydmVkTWVtb3J5OwogICAgIFBhZ2VDb3VudCBtX2luaXRp
YWwgeyB9OwogICAgIFBhZ2VDb3VudCBtX21heGltdW0geyB9OwotICAgIE1lbW9yeU1vZGUgbV9t
b2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBib29sIG1faXNJbXBvcnQg
eyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmNwcAppbmRleCAyMWQxZDBjN2QxZWFhYjJlNzJjYjM3ZTc5MTI0NThkNWZkM2U0
YzNkLi5lNzM2YmJmMmYxNzMyYWUyODQ4NDRmMzRlMjk5ODgzM2NiODY4NTIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMTYyLDEx
ICsxNjIsMTEgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJl
c3VsdAogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVs
ZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5h
bWUgbGVuZ3RoIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3Ry
aW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIs
ICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLSAgICAg
ICAgaW1wLm1vZHVsZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgbW9kdWxlU3RyaW5n
KTsKKyAgICAgICAgaW1wLm1vZHVsZSA9IG1vZHVsZVN0cmluZzsKIAogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1w
b3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBt
b2R1bGVTdHJpbmcsICInIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVt
YmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGlu
IG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwotICAgICAgICBpbXAuZmllbGQgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKKyAgICAgICAgaW1wLmZpZWxk
ID0gZmllbGRTdHJpbmc7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRl
cm5hbEtpbmQoaW1wLmtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9y
dCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKICAgICAgICAgc3dpdGNoIChpbXAua2luZCkgewpAQCAtMzE2LDcgKzMxNiw3
IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOwogICAgIEFTU0VS
VCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291
bnQpOwogCi0gICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbigq
bV92bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgbV9tb2RlLCBpc0ltcG9y
dCk7CisgICAgbV9yZXN1bHQubW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApAQCAtMzc2LDcgKzM3Niw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9y
dCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3Vt
ZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBvcnRO
dW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMoZmllbGRTdHJp
bmcpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBl
eHBvcnROYW1lcy5hZGQoZmllbGRTdHJpbmcpOwotICAgICAgICBleHAuZmllbGQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKG1fdm0sIGZpZWxkU3RyaW5nKTsKKyAgICAgICAgZXhwLmZpZWxkID0g
ZmllbGRTdHJpbmc7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5h
bEtpbmQoZXhwLmtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdz
IGtpbmQsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhwLmtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhw
b3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5o
CmluZGV4IGM5NjE4YjU3Y2E0MjJmMDFmZTlmNzlmNGMxNzk1MWEwZWI2Yjc1MGUuLjUwYTI4OTM1
ZWYxM2Y5NjIwZmExNTY4NDE3NmIxN2U4NGQ2NmMyYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTQ0LDkgKzQ0LDkgQEAgc3RydWN0IE1v
ZHVsZVBhcnNlclJlc3VsdCB7CiBjbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMgUGFyc2VyPE1v
ZHVsZVBhcnNlclJlc3VsdD4gewogcHVibGljOgogCi0gICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwg
Y29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBzdGQ6Om9w
dGlvbmFsPE1lbW9yeU1vZGU+IG1vZGUpCisKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25z
dCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiAgICAgICAgIDog
UGFyc2VyKHZtLCBzb3VyY2VCdWZmZXIsIHNvdXJjZUxlbmd0aCkKLSAgICAgICAgLCBtX21vZGUo
bW9kZSkKICAgICB7CiAgICAgfQogCkBAIC02Niw3ICs2Niw2IEBAIHByaXZhdGU6CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWlu
dDY0X3QmLCBUeXBlJiBpbml0RXhwclR5cGUpOwogCiAgICAgTW9kdWxlUGFyc2VyUmVzdWx0IG1f
cmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxs
b3B0IH07CiAgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBiNjU0MjQ5MjY0ODEwYWZlMDlhMTcwOTk1
MDRmNTYzMGJmODY1Y2M2Li5iYTBkNDhhMGU3NWMxZjFjZWM5MmU5NzVjNGJjZjU4MDJjZmE1MzRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC00Miw3ICs0Miw2
IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jl
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUwLDMw
ICs0OSw2NSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIAotUGxhbjo6UGxhbihWTSogdm0sIFZlY3Rv
cjx1aW50OF90PiBzb3VyY2UpCi0gICAgOiBQbGFuKHZtLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uu
c2l6ZSgpKQorCitQbGFuOjpQbGFuKFZNJiB2bSwgQXJyYXlCdWZmZXImIHNvdXJjZSwgQXN5bmNX
b3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4odm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZS5kYXRhKCkpLCBzb3VyY2UuYnl0ZUxlbmd0aCgpLCB3
b3JrLCBXVEZNb3ZlKHRhc2spKQoreworfQorCitQbGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVp
bnQ4X3Q+JiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisg
ICAgOiBQbGFuKHZtLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpLCB3b3JrLCBXVEZNb3Zl
KHRhc2spKQogewogfQogCi1QbGFuOjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3Qgc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25U
YXNrJiYgdGFzaykKICAgICA6IG1fdm0odm0pCisgICAgLCBtX2NvbXBsZXRpb25UYXNrKHRhc2sp
CiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VMZW5n
dGgpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQoreworfQorCitjb25zdCBjaGFyKiBQbGFuOjpz
dGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2Fz
ZSBTdGF0ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFsIjsKKyAgICBjYXNlIFN0YXRlOjpWYWxp
ZGF0ZWQ6IHJldHVybiAiVmFsaWRhdGVkIjsKKyAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDogcmV0
dXJuICJQcmVwYXJlZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGlsZWQ6IHJldHVybiAiQ29tcGls
ZWQiOworICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDogcmV0dXJuICJDb21wbGV0ZWQiOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBsYW46Om1v
dmVUb1N0YXRlKFN0YXRlIHN0YXRlKQoreworICAgIEFTU0VSVChzdGF0ZSA+IG1fc3RhdGUpOwor
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJtb3ZpbmcgdG8gc3RhdGU6ICIsIHN0YXRlU3RyaW5n
KHN0YXRlKSwgIiBmcm9tIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhtX3N0YXRlKSk7CisgICAgbV9z
dGF0ZSA9IHN0YXRlOworfQorCit2b2lkIFBsYW46OmZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKQogeworICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJmYWlsaW5nIHdpdGggbWVzc2FnZTogIiwgZXJyb3JNZXNzYWdlKTsKKyAgICBtX2Vycm9y
TWVzc2FnZSA9IFdURk1vdmUoZXJyb3JNZXNzYWdlKTsKKyAgICBjb21wbGV0ZShsb2NrZXIpOwog
fQogCi1ib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1v
cnlNb2RlPiByZWNvbXBpbGVNb2RlKQorYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KCkKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6SW5pdGlhbCk7CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIHZhbGlkYXRpb24iKTsKICAgICBNb25vdG9uaWNUaW1l
IHN0YXJ0VGltZTsKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGlt
ZXMoKSkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV92bSwgbV9zb3VyY2UsIG1fc291
cmNlTGVuZ3RoLCByZWNvbXBpbGVNb2RlKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcigmbV92bSwgbV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoKTsKICAgICAgICAgYXV0byBwYXJz
ZVJlc3VsdCA9IG1vZHVsZVBhcnNlci5wYXJzZSgpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0
KSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBhcnNlUmVzdWx0LmVycm9yKCk7Cisg
ICAgICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIFdURk1vdmUocGFyc2VSZXN1bHQuZXJy
b3IoKSkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG1f
bW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5tb2R1bGUpOwpAQCAtODIs
NTIgKzExNiw0OCBAQCBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRp
b25hbDxNZW1vcnlNb2RlPiByZWNvbXBpbGVNb2RlKQogICAgIH0KIAogICAgIGZvciAodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeS5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgewotICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDog
IiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5k
IGVuZGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0u
ZW5kKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24g
c3RhcnRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhd
LnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1
bmN0aW9uSW5kZXhdLmVuZCk7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQg
PSBtX3NvdXJjZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0
YXJ0OwogICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtm
dW5jdGlvbkluZGV4XS5zdGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1f
c291cmNlTGVuZ3RoKTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5j
dGlvbkluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3Qg
U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBz
aWduYXR1cmVJbmRleCk7CiAKLSAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRh
dGVGdW5jdGlvbihtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJl
LCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVk
U2lnbmF0dXJlSW5kaWNlcyk7CisgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlk
YXRlRnVuY3Rpb24oJm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1
ZWRTaWduYXR1cmVJbmRpY2VzKTsKICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkp
LCAiLCAiKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVy
cm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9u
SW5kZXgpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgZmFp
bChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IoKSwg
IiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkp
KTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVw
b3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3Rvbmlj
VGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygpLCAiIHVzIHRvIHZhbGlkYXRl
IG1vZHVsZSIpOworICAgIGlmIChtX2FzeW5jV29yayA9PSBWYWxpZGF0aW9uKQorICAgICAgICBj
b21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKKyAgICBlbHNlCisgICAgICAgIG1vdmVUb1N0YXRl
KFN0YXRlOjpWYWxpZGF0ZWQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBXZSBhcmUgY3Jl
YXRpbmcgYSBidW5jaCBvZiB0aHJlYWRzIHRoYXQgdG91Y2ggdGhlIG1haW4gdGhyZWFkJ3Mgc3Rh
Y2suIFRoaXMgd2lsbCBtYWtlIEFTQU4gdW5oYXBweS4KLS8vIFRoZSByZWFzb24gdGhpcyBpcyBP
SyBpcyB0aGF0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRp
bnVlIHVudGlsIGFsbCB0aHJlYWRzCi0vLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUg
ZG9uZSBleGVjdXRpbmcuCi1TVVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRp
b25hbDxNZW1vcnlNb2RlPiByZWNvbXBpbGVNb2RlKQordm9pZCBQbGFuOjpwcmVwYXJlKCkKIHsK
LSAgICBpZiAoIXBhcnNlQW5kVmFsaWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6VmFsaWRhdGVkKTsKKyAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgcHJlcGFyYXRpb24iKTsKIAogICAgIFRyYWNl
U2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2ViQXNzZW1ibHlDb21w
aWxlRW5kKTsKIAotICAgIGlmIChyZWNvbXBpbGVNb2RlKQotICAgICAgICBBU1NFUlQobV9tb2R1
bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKSA9PSByZWNvbXBpbGVNb2RlKTsKLQogICAgIGF1
dG8gdHJ5UmVzZXJ2ZUNhcGFjaXR5ID0gW3RoaXNdIChhdXRvJiB2ZWN0b3IsIHNpemVfdCBzaXpl
LCBjb25zdCBjaGFyKiB3aGF0KSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdmVjdG9yLnRyeVJl
c2VydmVDYXBhY2l0eShzaXplKSkpIHsKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFsbG9jYXRpbmcg
ZW5vdWdoIHNwYWNlIGZvciAiKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHNp
emUpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQod2hhdCk7Ci0gICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGZhaWwoaG9sZExv
Y2sobV9sb2NrKSwgYnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0OCwxMzEgKzE3OCwxNTQg
QEAgdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZWNvbXBpbGVNb2Rl
KQogICAgICAgICBpZiAoaW1wb3J0LT5raW5kICE9IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRl
eCA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCk7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1w
b3J0RnVuY3Rpb25JbmRleCwgIjogIiwgaW1wb3J0LT5tb2R1bGUsICI6ICIsIGltcG9ydC0+Zmll
bGQpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVu
Y3Rpb24gbnVtYmVyICIsIGltcG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIGltcG9ydC0+bW9kdWxl
LCAiOiAiLCBpbXBvcnQtPmZpZWxkKTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXMuYXQoaW1wb3J0LT5raW5kSW5kZXgpOwotICAgICAgICBtX3dhc21FeGl0U3R1YnMudW5jaGVj
a2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKG1fdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0
dXJlSW5kZXgsIGltcG9ydEZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgbV93YXNtRXhpdFN0dWJz
LnVuY2hlY2tlZEFwcGVuZChleGl0U3R1YkdlbmVyYXRvcigmbV92bSwgbV9jYWxsTGlua0luZm9z
LCBzaWduYXR1cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOwogICAgIH0KIAotICAgIG1f
Y3VycmVudEluZGV4ID0gMDsKKyAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6UHJlcGFyZWQpOworfQog
Ci0gICAgYXV0byBkb1dvcmsgPSBbdGhpc10gewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fY3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5k
ZXggPSBtX2N1cnJlbnRJbmRleDsKLSAgICAgICAgICAgICAgICArK21fY3VycmVudEluZGV4Owot
ICAgICAgICAgICAgfQorLy8gV2UgZG9uJ3QgaGF2ZSBhIHNlbWFwaG9yZSBjbGFzcy4uLiBhbmQg
dGhpcyBkb2VzIGtpbmRhIGludGVyZXN0aW5nIHRoaW5ncy4KK2NsYXNzIFBsYW46OlRocmVhZENv
dW50SG9sZGVyIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRDb3VudEhvbGRlcihQbGFuJiBwbGFuKQor
ICAgICAgICA6IG1fcGxhbihwbGFuKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9wbGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcysr
OworICAgIH0KIAotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1f
c291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7
Ci0gICAgICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtm
dW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8
PSBtX3NvdXJjZUxlbmd0aCk7Ci0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5z
aXplKCkgKyBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlv
bkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNp
Z25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKSk7Ci0KLSAgICAgICAgICAg
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVz
dWx0ID0gcGFyc2VBbmRDb21waWxlKCptX3ZtLCBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rp
b25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sICptX21vZHVsZUluZm9ybWF0aW9u
LCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKLQot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAg
ICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlw
bGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hv
b3NlIHRoZSBmaXJzdC4KLSAgICAgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtl
U3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBp
bmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSk7IC8vIEZJWE1FIG1ha2UgdGhp
cyBhbiBFeHBlY3RlZC4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgflRocmVh
ZENvdW50SG9sZGVyKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5t
X2xvY2spOworICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKIAotICAg
ICAgICAgICAgICAgIC8vIFdlIHdpbGwgdGVybWluYXRlIG9uIHRoZSBuZXh0IGV4ZWN1dGlvbi4K
LSAgICAgICAgICAgICAgICBjb250aW51ZTsgCi0gICAgICAgICAgICB9CisgICAgICAgIGlmICgh
bV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgbV9wbGFuLmNvbXBs
ZXRlKGxvY2tlcik7CisgICAgfQogCi0gICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
c1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0gICAg
ICAgIH0KLSAgICB9OworICAgIFBsYW4mIG1fcGxhbjsKK307CiAKLSAgICBNb25vdG9uaWNUaW1l
IHN0YXJ0VGltZTsKLSAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGlt
ZXMoKSkKLSAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit2b2lkIFBs
YW46OmNvbXBpbGVGdW5jdGlvbnMoKQoreworICAgIEFTU0VSVChtX3N0YXRlID49IFN0YXRlOjpQ
cmVwYXJlZCk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIGNvbXBpbGF0aW9u
Iik7CiAKLSAgICB1aW50MzJfdCB0aHJlYWRDb3VudCA9IE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRK
SVQoKSA/IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAgICB1aW50MzJfdCBu
dW1Xb3JrZXJUaHJlYWRzID0gdGhyZWFkQ291bnQgLSAxOwotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyPiB0aHJlYWRzOwotICAgIHRocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bVdvcmtlclRo
cmVhZHMpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Xb3JrZXJUaHJlYWRzOyBp
KyspCi0gICAgICAgIHRocmVhZHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZVRocmVhZCgianNjLndh
c20tYjMtY29tcGlsYXRpb24udGhyZWFkIiwgZG9Xb3JrKSk7CisgICAgaWYgKG1fc3RhdGUgPj0g
U3RhdGU6OkNvbXBpbGVkKQorICAgICAgICByZXR1cm47CisgICAgVGhyZWFkQ291bnRIb2xkZXIg
aG9sZGVyKCp0aGlzKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50MzJfdCBmdW5j
dGlvbkluZGV4OworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbV9jdXJy
ZW50SW5kZXg7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRl
OjpDb21waWxlZCk7CisgICAgICAgIH0KIAotICAgIGRvV29yaygpOyAvLyBMZXQgdGhlIG1haW4g
dGhyZWFkIGRvIHNvbWUgd29yayB0b28uCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5k
ZXhdLnN0YXJ0OworICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3Ro
IDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAg
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBm
dW5jdGlvbkluZGV4OworICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBBU1NFUlQo
dmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKKworICAgICAgICBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7
CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1f
dm0sIG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5j
dGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIG1fbW9kZSk7CisKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkdl
dHRpbmcgdGhlIGxvY2s6IGZhaWwiKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAgICAg
ICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBX
ZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZhaWwobG9j
a2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5j
dGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhN
RSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1
cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhy
ZWFkc1tpXSk7CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
ID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9CiAKLSAgICBmb3Ig
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAgewotICAg
ICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlw
dGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpLT50
b1N0cmluZygpOwordm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpCit7
CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4
ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAw
OyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5j
dGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsK
LSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+
d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAgIENvbXBpbGF0aW9u
Q29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XTsK
KyAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5k
ZXhdOworICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNt
RW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91
bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNz
ZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRp
b24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9k
dWN0cykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNvbnRleHQu
anNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIo
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNv
bXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpjb250
ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5j
dGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAgICAg
ICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dh
c21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxh
dGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0
aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkg
ZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5h
c2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAot
ICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKSB7Ci0gICAg
ICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUp
Lm1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxlIGFuZCBsaW5rIHRo
ZSBtb2R1bGUiKTsKLSAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNp
dGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0byYgdW5saW5r
ZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsKLSAg
ICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQg
b2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBs
YWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxs
LnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMKKyAgICAgICAg
Zm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5j
dGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxk
IGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9p
bnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJU
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQgPT0gVW5saW5rZWRX
YXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAgICAgID8gbV93YXNt
RXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkKICAgICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0U3R1YnMuYXQoY2Fs
bC5mdW5jdGlvbkluZGV4KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJnZXQg
IT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAgICAgICAgICAgICAg
ICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVu
Y3Rpb25JbmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5jb21w
aWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbklu
ZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9u
LT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgbV9mYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxl
dGVkKSB7CisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAgICAgICBt
X2NvbXBsZXRpb25UYXNrKCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7
CisgICAgfQogfQogCi12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJs
eUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2b2lkIFBsYW46Ondh
aXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgp
IHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQotICAgICAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVu
dHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0
aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKLQot
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2Vi
QXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVuY3Rp
b24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxs
ZWUpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0g
U3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3
YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHRvIGNv
bXBsZXRlIC8gZmFpbC4KKyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xvY2spOworICAgIH0K
K30KIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2lu
dENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpjYW5jZWwoKQorewor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6
OkNvbXBsZXRlZCkgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNzYWdl
IHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgfQogfQogCisK
IFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5MDkzZWY2YmE4MTg0
ZTQ1YzRmZTAwNzY2MmY0Li43YWZkNjUwYzdmYTk1ZjY1NzJmZWQ5ZmRkNTgwMzdmOTA0MWZlNmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEgKzQwLDkzIEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAK
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFu
KFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQgZG9udEZpbmFs
aXplKFBsYW4mKSB7IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChQbGFuJik+IENv
bXBsZXRpb25UYXNrOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21waWxl
LCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVm
ZXJlbmNlIGN5Y2xlLgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFzeW5jV29yaywgQ29t
cGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1
aW50OF90PiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIGJvb2wg
cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0gc3RkOjpu
dWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6Om51
bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAgIHZvaWQg
Y29tcGlsZUZ1bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFs
aXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwg
SlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwotCi0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0K
LSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsK
LSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluaXRpYWxp
emVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBvcnRz
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0
dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAgICAgc2l6ZV90IGlu
dGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6
ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Cisg
ICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAgICAgfQog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJbmZv
cm1hdGlvbigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAogICAgIEJhZzxDYWxs
TGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFo
YXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwogICAg
IH0KIAogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhpdFN0dWJzKCkKICAg
ICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAgTWVtb3J5
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgdm9pZCBzZXRNb2RlKE1l
bW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBzZXRQZW5kaW5nUHJv
bWlzZShKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSkgeyBtX3BlbmRpbmdQcm9taXNlID0gcHJv
bWlzZTsgfQorICAgIEpTUHJvbWlzZURlZmVycmVkKiBwZW5kaW5nUHJvbWlzZSgpIHsgcmV0dXJu
IG1fcGVuZGluZ1Byb21pc2U7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9
CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7CisgICAgICAgIEluaXRpYWwsCisg
ICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQsCisgICAgICAgIENvbXBpbGVkLAor
ICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21wbGV0ZWQgaWYg
d2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKworICAgIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKworICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFlcnJvck1lc3NhZ2Uo
KS5pc051bGwoKTsgfQorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9CisKKyAgICB2b2lkIHdhaXRGb3JD
b21wbGV0aW9uKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToKKyAgICBjbGFzcyBU
aHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRIb2xkZXI7CisK
KyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CisKKyAgICB2b2lkIG1v
dmVUb1N0YXRlKFN0YXRlKTsKKyAgICB2b2lkIGZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBT
dHJpbmcmJiBlcnJvck1lc3NhZ2UpOworCisgICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3Rh
dGUpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUlu
Zm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gbV9tb2R1bGVT
aWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKQEAgLTEwMywxNiArMTM1
LDI0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxG
dW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlv
bkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAgIFZNKiBtX3ZtOworICAgIFZN
JiBtX3ZtOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3BlbmRpbmdQcm9taXNlIHsgbnVsbHB0
ciB9OworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRhc2s7CisKICAgICBWZWN0b3I8
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
OwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJj
ZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2Vycm9y
TWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKKyAgICBNZW1vcnlNb2RlIG1f
bW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7Cisg
ICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6SW5p
dGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAgICB1aW50OF90IG1f
bnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1fY3VycmVudEluZGV4
IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFkYzYzMmVhOTIzNTYyYzM2MGNk
Y2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21Q
bGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0
b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZvciAodW5zaWdu
ZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewor
ICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNy
ZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNy
ZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9j
YXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBjYWxsYmFjayhpbnRlcm5h
bEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUp
OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRh
dGUuY3BwCmluZGV4IDc1ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMzNzRmY2FlNjU0NjEyMTQuLjky
Mzg1OTRiYTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIGF1dG8g
VmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJnZXQsIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiBleHByCiAgICAgICAgIGlmICh0YXJnZXQuc2lnbmF0dXJlKCkgPT0gVm9p
ZCkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiYnJhbmNoIHRvIGJsb2NrIG9uIGVtcHR5
IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHBy
ZXNzaW9uU3RhY2suaXNFbXB0eSgpLCB0YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2
ZWwgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJsb2NrIiwgIiBvbiBl
bXB0eSBleHByZXNzaW9uIHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwgdGFyZ2V0LnNpZ25hdHVyZSgp
KTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJnZXQuc2lnbmF0dXJlKCkgIT0g
ZXhwcmVzc2lvblN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgZG9lc24ndCBtYXRj
aCBibG9jaydzIHR5cGUiKTsKIAogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzYzY2RiYmY5YzJlYjQ0
YzQ1MjhjYTM3YjFkNzVlMzNiZmI4ODY4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAsMCArMSwyNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgY2hhciogV29ya2xpc3Q6OnByaW9yaXR5U3RyaW5n
KFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNl
IFByaW9yaXR5OjpQcmVwYXJhdGlvbjogcmV0dXJuICJQcmVwYXJhdGlvbiI7CisgICAgY2FzZSBQ
cmlvcml0eTo6U2h1dGRvd246IHJldHVybiAiU2h1dGRvd24iOworICAgIGNhc2UgUHJpb3JpdHk6
OkNvbXBpbGF0aW9uOiByZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAgICBjYXNlIFByaW9yaXR5OjpT
eW5jaHJvbm91czogcmV0dXJuICJTeW5jaHJvbm91cyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0OjpUaHJlYWQgZmluYWwgOiBw
dWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEF1dG9tYXRpY1Ro
cmVhZCBCYXNlOworICAgIFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBXb3Jr
bGlzdCYgd29yaykKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgd29yay5tX2xvY2ssIHdvcmsubV9w
bGFuRW5xdWV1ZWQpCisgICAgICAgICwgd29ya2xpc3Qod29yaykKKyAgICB7CisKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9uUGxhbihjb25z
dCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0
Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVudC5wbGFuKQorICAg
ICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBx
dWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisgICAgICAgIHN5bmNocm9uaXplLm5vdGlmeUFsbCgp
OworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgeworCisgICAgICAgICAgICBQcmlv
cml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICAgICAgaWYgKHBy
aW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24pCisgICAgICAgICAgICAgICAg
cmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAgIGVsZW1lbnQgPSBxdWV1ZS50
b3AoKTsKKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFsaWRhdGUvcHJl
cGFyZS4KKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVlblByZXBhcmVk
KCkpCisgICAgICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50LnBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6
V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIgdGhyZWFkIGxp
bmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhl
ciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9uUGxhbihsb2Nr
ZXIpOworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0KKworICAgIFdvcmtSZXN1bHQg
d29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNvbXBsZXRlID0gWyZdICgpIHsK
KyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVy
biBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuKiBwbGFu
ID0gZWxlbWVudC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQocGxhbik7CisgICAgICAgIGlm
ICghcGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAgICAgIHBsYW4tPnBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxhbi0+aGFzV29yaygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBwbGFuLT5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCp3b3Jr
bGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0UHJpb3JpdHkoKTsKKyAgICAg
ICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsKKyAgICAgICAgICAgIHdvcmts
aXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBzb21lIG9jY2FzaW9uYWxseSB0
byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5IGUuZy4gc3luY2hyb25vdXMs
IHBsYW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBsYW4tPmNvbXBpbGVGdW5jdGlv
bnMoKTsKKyAgICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAgICAgICBhdHRlbXB0
VG9SZW1vdmVDb21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOworICAg
ICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBDb25kaXRpb24g
c3luY2hyb25pemU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0OworICAgIC8vIFdlIGNhbiBvbmx5
IG1vZGlmeSBlbGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4gQSBzeW5jaHJvbm91cyBjb21w
aWxlIG1pZ2h0IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBpbiBvcmRlciB0byBib29zdCB0
aGUgcHJpb3JpdHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7Cit9OworCit2b2lkIFdvcmts
aXN0OjpRdWV1ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7CisgICAgc3dpdGNoIChwcmlvcml0
eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgorICAgICAgICBwcmlvcml0eSA9
IFByaW9yaXR5OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJpb3Jp
dHk6OlN5bmNocm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgV29ya2xpc3Q6OmVucXVldWUoUmVmUHRyPFBsYW4+IHBsYW4pCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CisKKyAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvbWlzZSBp
dCBtdXN0IGJlIHN5bmNocm9ub3VzIHNvIHdlIHNob3VsZCBib29zdCB0aGUgcHJpb3JpdHkuCisg
ICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBwbGFuLT5wZW5kaW5nUHJvbWlzZSgpID8gUHJpb3JpdHk6
OlByZXBhcmF0aW9uIDogUHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJFbnF1ZXVpbmcgcGxhbiB3aXRoIHByaW9yaXR5OiAiLCBwcmlvcml0eVN0cmluZyhw
cmlvcml0eSkpOworICAgIG1fcXVldWUucHVzaCh7IHByaW9yaXR5LCBuZXh0VGlja2V0KCksICBX
VEZNb3ZlKHBsYW4pIH0pOworICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsK
K30KKwordm9pZCBXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseShQbGFuJiBwbGFu
KQoreworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAg
IC8vIHN0ZDo6cHJpb3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBhbiBpdGVyYXRvciBvciBkZWNy
ZWFzZV9rZXkuLi4gOiggV2hpbGUgdGhpcyBpcyBncm9zcywgdGhpcyBmdW5jdGlvbgorICAgICAg
ICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBxdWV1ZSBzaG91bGQg
YmUgc21hbGwuCisgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9y
aXR5UXVldWUgdGhhdCBkb2Vzbid0IHN1Y2suCisgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFF1
ZXVlRWxlbWVudD4gZWxlbWVudHM7CisgICAgICAgIHdoaWxlICghbV9xdWV1ZS5lbXB0eSgpKSB7
CisgICAgICAgICAgICBpZiAobV9xdWV1ZS50b3AoKS5wbGFuID09ICZwbGFuKSB7CisgICAgICAg
ICAgICAgICAgUXVldWVFbGVtZW50IHRhcmdldCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgICAg
ICAgICAgbV9xdWV1ZS5wb3AoKTsKKworICAgICAgICAgICAgICAgIHRhcmdldC5wcmlvcml0eSA9
IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICAgICAgICAgICAgICBtX3F1ZXVlLnB1c2godGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsZW1lbnRzLnB1c2hfYmFjayhtX3F1ZXVlLnRvcCgpKTsKKyAgICAgICAgICAgIG1fcXVldWUu
cG9wKCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8gZWxlbWVudCA6IGVsZW1lbnRz
KQorICAgICAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworCisgICAgICAgIGZvciAoYXV0
byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50
LnBsYW4gPT0gJnBsYW4pCisgICAgICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnByaW9yaXR5
ID0gUHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAgICAgICB9CisgICAgfQorCisgICAgcGxhbi53
YWl0Rm9yQ29tcGxldGlvbigpOworfQorCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JW
TShWTSYgdm0pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgLy8gc3Rk
Ojpwcmlvcml0eV9xdWV1ZSBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJhdG9yLi4uIDooIFdoaWxlIHRo
aXMgaXMgZ3Jvc3MsIHRoaXMgZnVuY3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZl
cnkgb2Z0ZW4gYW5kIHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdl
IHNob3VsZCBoYXZlIG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAg
ICBzdGQ6OnZlY3Rvcjxjb25zdCBRdWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOworICAgIHdoaWxlICgh
bV9xdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgIGlmICgmbV9xdWV1ZS50b3AoKS5wbGFuLT52bSgp
ID09ICZ2bSkgeworICAgICAgICAgICAgbV9xdWV1ZS50b3AoKS5wbGFuLT5jYW5jZWwoKTsKKyAg
ICAgICAgICAgIG1fcXVldWUucG9wKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBlbGVtZW50cy5wdXNoX2JhY2sobV9xdWV1ZS50b3AoKSk7CisgICAgICAgIG1f
cXVldWUucG9wKCk7CisgICAgfQorCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykK
KyAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworCisgICAgZm9yIChhdXRvJiB0aHJlYWQg
OiBtX3RocmVhZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuICYmICZ0aHJl
YWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0aHJlYWQgY2Fu
J3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2Nr
IHRvIGRvIHNvLgorICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnBsYW4tPmNhbmNlbCgpOwor
ICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KCptX2xvY2spOworICAgICAgICB9
CisgICAgfQorfQorCitXb3JrbGlzdDo6V29ya2xpc3QoKQorICAgIDogbV9sb2NrKEJveDxMb2Nr
Pjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OmNyZWF0ZSgpKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRz
ID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNv
cmVzKCkgOiAxOworICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDb21waWxh
dGlvblRocmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkczsgaSsrKQorICAg
ICAgICBtX3RocmVhZHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8V29ya2xpc3Q6
OlRocmVhZD4obG9ja2VyLCAqdGhpcykpOworfQorCitXb3JrbGlzdDo6fldvcmtsaXN0KCkKK3sK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAgICBtX3F1
ZXVlLnB1c2goeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsK
KyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIH0KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3RocmVhZHNbaV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlz
dDsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKSB7IHJldHVybiBnbG9iYWxX
b3JrbGlzdDsgfQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVXb3JrbGlzdCwgW10geworICAgICAgICBnbG9iYWxXb3JrbGlzdCA9IG5ldyBXb3JrbGlz
dCgpOworICAgIH0pOworICAgIHJldHVybiAqZ2xvYmFsV29ya2xpc3Q7Cit9CisKKworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmRl
NzJmMzJhYWY4ZGNhNThlNjY5NWZkMWY5ZjhiZDcxYzBjZWE2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTAsMCArMSwxMDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIlZNLmgiCisKKyNp
bmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1Byb21pc2VE
ZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOworCitjbGFzcyBXb3Jr
bGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV29ya2xp
c3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5x
dWV1ZShSZWZQdHI8UGxhbj4pOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yVk0oVk0mKTsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25vdXNseShQbGFu
Jik7CisKKyAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qKTsK
KyAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qKTsKKworcHJp
dmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKKworICAg
IHR5cGVkZWYgdW5zaWduZWQgVGlja2V0OworICAgIFRpY2tldCBuZXh0VGlja2V0KCkgeyByZXR1
cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBlbnVtIGNsYXNzIFByaW9yaXR5IHsK
KyAgICAgICAgU2h1dGRvd24sCisgICAgICAgIFN5bmNocm9ub3VzLAorICAgICAgICBDb21waWxh
dGlvbiwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworICAgIGNvbnN0IGNoYXIqIHByaW9y
aXR5U3RyaW5nKFByaW9yaXR5KTsKKworICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQgeworICAgICAg
ICBQcmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRpY2tldDsKKyAgICAgICAgUmVm
UHRyPFBsYW4+IHBsYW47CisKKyAgICAgICAgdm9pZCBuZXh0UHJpb3JpdHkoKTsKKyAgICB9Owor
CisgICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IFF1ZXVlRWxlbWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50JiByaWdodCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxlZnQucHJpb3JpdHkgPT0gcmlnaHQucHJpb3Jp
dHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0Owor
ICAgICAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBCb3g8TG9jaz4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0
aWNUaHJlYWRDb25kaXRpb24+IG1fcGxhbkVucXVldWVkOworICAgIC8vIFRlY2huaWNhbGx5LCB0
aGlzIGNvdWxkIG92ZXJmbG93IGJ1dCB0aGF0J3MgdW5saWtlbHkuIEV2ZW4gaWYgaXQgZGlkLCB3
ZSB3aWxsIGp1c3QgY29tcGlsZSB0aGluZ3Mgb2YgdGhlIHNhbWUKKyAgICAvLyBQcmlvcml0eSBp
dCB0aGUgd3Jvbmcgb3JkZXIsIHdoaWNoIGlzbid0IHdyb25nLCBqdXN0IHN1Ym9wdGltYWwuCisg
ICAgVGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBXVEY6OlZlY3RvciBidXQgV1RGOjpWZWN0b3IgZG9lcyBub3Qgc3VwcG9ydCBy
YW5kb20gYWNjZXNzIGl0ZXJhdG9yLgorICAgIHN0ZDo6cHJpb3JpdHlfcXVldWU8UXVldWVFbGVt
ZW50LCBzdGQ6OnZlY3RvcjxRdWV1ZUVsZW1lbnQ+LCBDb21wYXJhdG9yPiBtX3F1ZXVlOworICAg
IEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKj4gbV9hY3RpdmVQbGFuczsKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRocmVhZD4+IG1fdGhyZWFkczsKK307CisKK1dvcmtsaXN0
KiBleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCk7CitKU19FWFBPUlRfUFJJVkFURSBXb3JrbGlzdCYg
ZW5zdXJlV29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAppbmRleCBiODc3N2RhMGQ0ZDdhMTMwZjQyMjRl
ZDQ1ZmNjYzJkMTljMWYyN2M2Li5hOGEzZGNhM2QwOWY1ZGQzOWRhNmI5YThmOTk1ZGM4NTA4OTg3
YWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVyczsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50
cnlwb2ludCYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZN
Jik7CiAKICAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwCmluZGV4IGZmODcxMTY4MTlhMzIyNDM5ZTgxY2JkMDQ2NDcyYTI2ZjIxODNkOGIuLmViOTYw
NzNiNjk5OGIwMmEyMDc0YWIxNWRmNzc0Njc2MmQ2ZmI1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBA
IC0yOSwzMSArMjksNjcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCisjaW5jbHVkZSAiV2FzbVBsYW5JbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNz
ZW1ibHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxM
aW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3
YXNtRXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50
KQorSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCBSZWY8
V2FzbTo6UGxhbj4mJiBwbGFuLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICA6IEJhc2Uodm0s
IHZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9jYWxsTGlu
a0luZm9zKFdURk1vdmUoY2FsbExpbmtJbmZvcykpCi0gICAgLCBtX3dhc21FeGl0U3R1YnMoV1RG
TW92ZSh3YXNtRXhpdFN0dWJzKSkKKyAgICAsIG1fcGxhbihXVEZNb3ZlKHBsYW4pKQogICAgICwg
bV9tb2RlKG1vZGUpCiAgICAgLCBtX2NhbGxlZUNvdW50KGNhbGxlZUNvdW50KQogewogICAgIG1f
bW9kdWxlLnNldCh2bSwgdGhpcywgb3duZXIpOworICAgIEFTU0VSVCghbW9kdWxlKCktPmNvZGVC
bG9jayhtb2RlKSk7CisgICAgbW9kdWxlKCktPm1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIHRoaXMpOworCiAgICAgbWVtc2V0KGNhbGxlZXMoKSwg
MCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxl
ZT4pICogMik7CiB9CiAKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgaWYgKGluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZNJiB2
bSA9IHBsYW4oKS52bSgpOworICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcGxhbigpLmhhc1dvcmsoKSk7CisKKyAgICBp
ZiAocGxhbigpLmZhaWxlZCgpKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGxhbigpLmVy
cm9yTWVzc2FnZSgpOworICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQocGxhbigpLm1vZGUoKSA9PSBtb2RlKCkpOwor
ICAgIEFTU0VSVChwbGFuKCkuaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgPT0gbV9jYWxsZWVDb3Vu
dCk7CisKKyAgICBtX2NhbGxMaW5rSW5mb3MgPSBwbGFuKCkudGFrZUNhbGxMaW5rSW5mb3MoKTsK
KyAgICBtX3dhc21FeGl0U3R1YnMgPSBwbGFuKCkudGFrZVdhc21FeGl0U3R1YnMoKTsKKworICAg
IHBsYW4oKS5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgIHNldEpTRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIHNldFdhc21FbnRy
eXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAg
IH0pOworCisgICAgbV9wbGFuID0gbnVsbHB0cjsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6On5KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNT
YWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQorYm9vbCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIGNvbnN0
CiB7CisgICAgaWYgKCFydW5uYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBX
YXNtOjpNZW1vcnlNb2RlIGNvZGVNb2RlID0gbW9kZSgpOwogICAgIFdhc206Ok1lbW9yeU1vZGUg
bWVtb3J5TW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOwogICAgIHN3aXRjaCAoY29kZU1v
ZGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SGVscGVycy5oCmluZGV4IGYwMzMxMGVhNWUyMDYwNjU0MWQ1OGU3MjY0YjE4NWU0M2Q2OTMz
ZDQuLjU3OGE2OWY0OTgxNWE4MjUyM2MxMTI5NDhmYmQ4ZWEwOTAzNWYyMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApA
QCAtNzMsNiArNzMsMjIgQEAgQUxXQVlTX0lOTElORSB1aW50OF90KiBnZXRXYXNtQnVmZmVyRnJv
bVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgc2kKICAgICByZXR1cm4gYXJy
YXlCdWZmZXJWaWV3ID8gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+dmVj
dG9yKCkpIDogc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEo
KSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVTb3VyY2VC
dWZmZXJGcm9tVmFsdWUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgc2l6
ZV90IGJ5dGVPZmZzZXQ7CisgICAgc2l6ZV90IGJ5dGVTaXplOworICAgIHVpbnQ4X3QqIGRhdGEg
PSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBieXRlT2Zmc2V0LCBieXRlU2l6
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAg
IGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhICsgYnl0ZU9mZnNldCwg
Ynl0ZVNpemUpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIHJldHVybiBidWZmZXI7CisKKyAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQUxXQVlTX0lOTElORSBib29sIGlz
V2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiom
IHdhc21XcmFwcGVyRnVuY3Rpb24pCiB7CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHModm0sIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmluZm8oKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDFjMTFiMGNh
NjVjOTE3NDJmOGU0ODEzYzI0ZDk3NWY2NWVlYmFhMTguLjkxZGEzOWUyNTdlMTQzMTNiMzUzNGY2
M2VmZGE1NjUyMjk4MDQ1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMzIsMzEgKzMyLDE2IEBACiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIK
ICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9k
dWxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4gZm9yIG1vZHVsZXMg
dGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2FudCB0byBhdm9pZCBy
ZWNvbXBsaW5nIHRoZXJlLgotICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7Ci0gICAgICAgIGF1
dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMs
IG1lbW9yeSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKLSAgICAgICAg
bV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIH0KLSAgICBtX21lbW9y
eS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Ci19Ci0KLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9k
dWxlTmFtZXNwYWNlT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxk
IGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KLSAgICBhdXRv
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0
YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
LmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpKSkgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIG1vZHVsZSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKLSAgICByZXR1cm4gaW5z
dGFuY2U7Ci19Citjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8g
PSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CkBAIC03NSwxMSArNjAsMTEgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlLAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCisgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlz
LCBtb2R1bGUpOwogICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAg
IG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUp
OwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXpl
KTsKIAotICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jb2RlQmxvY2soKSk7
CiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3Bh
Y2VPYmplY3QpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJleHBvcnRzIiksIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9CkBAIC05NSwxNiAr
ODAsMjc3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVs
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2spOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXpl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9y
dEZ1bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqdGhpc09iamVjdC0+aW1w
b3J0RnVuY3Rpb24oaSkpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBv
cnRGdW5jdGlvbnMoKVtpXSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjphZGRV
bml0aWFsaXplZENvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpQbGFuPiBwbGFuKQoreworICAg
IGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgbW9k
dWxlKCksIG1lbW9yeU1vZGUoKSwgV1RGTW92ZShwbGFuKSwgbW9kdWxlKCktPm1vZHVsZUluZm9y
bWF0aW9uKCkuaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpOworICAgIG1fY29kZUJsb2NrLnNldCh2
bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aW5pdGlhbGl6ZWQo
KSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZSgpOworCisgICAgaWYgKCFj
b2RlQmxvY2soKS0+cnVubmFibGUoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrKCktPmVycm9y
TWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQo
Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKG1lbW9yeSgpKSk7CisKKyAgICBhdXRvKiBtb2R1bGVS
ZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOworICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBt
b2R1bGUoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKKworICAg
IEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOworICAg
IFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgKTsKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNN
b2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1
cmUpCit7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisg
ICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNN
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisKKyAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAo
SlNPYmplY3QqIGVycm9yKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIC8vIElm
IHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRP
YmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KKyAgICBpZiAobW9k
dWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4n
dCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBP
YmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIpKSk7CisK
KyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5h
bWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKKyAg
ICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVs
ZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxl
TmFtZXNwYWNlKGV4ZWMpOworICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHBy
ZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KKyAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
dm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25D
b3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSk7CisgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNwYWNlKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgLy8gTGV0IGZ1bmNzLCBt
ZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBK
YXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3Nl
bWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCisgICAgLy8gTGV0IGltcG9ydHMgYmUg
YW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgorICAgIHVuc2lnbmVk
IG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7CisgICAgdW5zaWduZWQgbnVtSW1wb3J0R2xvYmFscyA9
IDA7CisKKyAgICBib29sIGhhc01lbW9yeUltcG9ydCA9IGZhbHNlOworICAgIGJvb2wgaGFzVGFi
bGVJbXBvcnQgPSBmYWxzZTsKKyAgICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1w
b3J0czoKKyAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMp
IHsKKyAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3Jt
aW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25hbWUpLgorICAgICAgICBKU1ZhbHVlIGlt
cG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIGltcG9ydC5tb2R1bGUpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1
ZS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkp
OworCisgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChv
LCBpLml0ZW1fbmFtZSkKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBpbXBvcnQuZmllbGQpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgICAg
ICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9y
dDoKKyAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMgZmFsc2UsIHRocm93IGEg
V2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJl
IGNhbGxhYmxlIikpKTsKKworICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0
PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0
ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHdhc21GdW5jdGlvbjsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiB3YXNtV3JhcHBlckZ1bmN0aW9uOworICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24p
KSB7CisgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90
IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3Iu
CisgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleDsKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAg
ICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbXBvcnRl
ZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4K
KyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5j
dGlvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAgICAg
ICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNp
Z25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidz
IHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpaWkuIE90aGVy
d2lzZToKKyAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rp
b24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFz
c2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFu
ZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNzZW1i
bHlWYWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMgcGFydCBvZiBQbGFuIGNvbXBp
bGF0aW9uLgorICAgICAgICAgICAgLy8gaXYuIEFwcGVuZCB2IHRvIGZ1bmNzLgorICAgICAgICAg
ICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmls
bHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5j
ZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCisKKyAg
ICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7
CisgICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rp
b25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIC8vIHYuIEFw
cGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRl
ZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAgICAvLyA3LiBPdGhlcndpc2Ug
KGkgaXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAgICAgaGFzVGFibGVJbXBvcnQgPSB0cnVl
OworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGkuIElmIHYg
aXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5Lkxp
bmtFcnJvci4KKyAgICAgICAgICAgIGlmICghdGFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFi
bGUiKSkpOworCisgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKGFjdHVh
bEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkp
OworCisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhp
bXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAg
ICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVtID0gdGFi
bGUtPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBh
ICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworICAg
ICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+ICpleHBlY3RlZE1heGltdW0pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdzICdtYXhpbXVtJyBp
cyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KKyAgICAg
ICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCisgICAgICAgICAg
ICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVt
b3J5OiB7CisgICAgICAgICAgICAvLyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5KTsKKyAgICAgICAgICAgIGhhc01lbW9y
eUltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkg
PSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSwgdmFsdWUpOworICAgICAg
ICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJv
dyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAgIGlmICghbWVtb3J5KQorICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5j
ZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpOworCisgICAgICAgICAgICBXYXNtOjpQYWdlQ291
bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsK
KyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1v
cnkoKS5pbml0aWFsKCk7CisgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVk
SW5pdGlhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92
aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICBp
ZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeS5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFs
TWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCkubWF4aW11bSgpOworICAgICAgICAgICAgICAgIGlm
ICghYWN0dWFsTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9y
eSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVz
IHRoYXQgaXQgZG9lcyIpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+
IGV4cGVjdGVkTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9y
eSBpbXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQg
J21heGltdW0nIikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWkuIEFwcGVu
ZCB2IHRvIG1lbW9yaWVzLgorICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1d
IHRvIGltcG9ydHMuCisgICAgICAgICAgICBBU1NFUlQoIWluc3RhbmNlLT5tX21lbW9yeSk7Cisg
ICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwgbWVtb3J5KTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6R2xvYmFsOiB7CisgICAgICAgICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9y
dDoKKyAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRo
cm93IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0
YWJsZSk7CisgICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0
IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3Iu
CisgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZElu
ZGV4XS50eXBlID09IFdhc206Okk2NCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1w
b3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOworICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9i
YWwgbXVzdCBiZSBhIG51bWJlciIpKSk7CisgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dl
YkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KKyAgICAgICAgICAgIEFTU0VSVChudW1JbXBv
cnRHbG9iYWxzID09IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAgICAgc3dpdGNoIChtb2R1
bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwo
bnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9i
YWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVt
YmVyKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAg
ICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmlzSW1wb3J0KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBh
IE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
aXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdz
IGEgbWVtb3J5IGRlZmluaXRpb24uCisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBt
ZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAg
ICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworCisgICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1v
cnkuc2V0KHZtLCBpbnN0YW5jZSwKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1v
cnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24gJiYgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKSB7Cisg
ICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ug
c2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGhhc1RhYmxlSW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghIW1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5p
c0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBh
IFRhYmxlIGRlZmluaXRpb24uCisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxl
ID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAg
IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZv
cm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICAvLyBXZSBz
aG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2Un
dmUgZGVmaW5lZC4KKyAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFy
Z2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCisgICAgICAgICAg
ICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHRh
YmxlKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRh
YmxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnko
KSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhh
dCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5
IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBpbnN0YW5jZS0+
bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJl
KCksIGFkb3B0UmVmKCoobmV3IFdhc206Ok1lbW9yeSgpKSkpKTsKKyAgICB9CisgICAgCisgICAg
Ly8gR2xvYmFscworICAgIHsKKyAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gbW9k
dWxlSW5mb3JtYXRpb24uZmlyc3RJbnRlcm5hbEdsb2JhbCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGdsb2JhbEluZGV4ID0gbnVtSW1wb3J0R2xvYmFsczsgZ2xvYmFsSW5kZXggPCBtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzLnNpemUoKTsgKytnbG9iYWxJbmRleCkgeworICAgICAgICAgICAgY29u
c3QgYXV0byYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tnbG9iYWxJbmRleF07
CisgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpH
bG9iYWw6OklzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25U
eXBlID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2Jh
bHMpOworICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGlu
c3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFs
KGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBBU1NFUlQoIWluc3RhbmNlLT5jb2RlQmxvY2soKSk7CisgICAgaW5z
dGFuY2UtPm1fY29kZUJsb2NrLnNldE1heUJlTnVsbCh2bSwgaW5zdGFuY2UsIGpzTW9kdWxlLT5j
b2RlQmxvY2soaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkpOworCisgICAgcmV0dXJuIGluc3RhbmNl
OwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAppbmRleCBlMjI4NDk2OTY3MjA1YTMxMzZjODgzYmJkZTMyNmFkYmM3MTExMzBkLi5l
YzliYzhlODE0MDcyYjdlZTI1ZTkyYjliNDllMTA4NDZhYmZkNWRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAt
MzgsNTEgKzM4LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogCituYW1lc3BhY2UgV2FzbSB7Citj
bGFzcyBQbGFuOworfQorCisKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJs
ZU9iamVjdCBCYXNlOwogCi0KLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0m
LCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVj
dCwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAg
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm1vZHVsZSgpOwot
ICAgIH0KKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7
IHJldHVybiBjb2RlQmxvY2soKSAmJiBjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZWQoKTsgfQorICAg
IHZvaWQgYWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2soVk0mLCBSZWY8V2FzbTo6UGxhbj4pOworICAg
IHZvaWQgZmluYWxpemVDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSopOwogCi0gICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKLSAgICB9Cisg
ICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUu
Z2V0KCk7IH0KIAotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9uKHVu
c2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1w
b3J0RnVuY3Rpb25zKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRGdW5jdGlvbnMoKVtpZHhdOwot
ICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpCi0g
ICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4q
PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7
Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbXBvcnRGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB2
YWx1ZSwgdW5zaWduZWQgaWR4KQotICAgIHsKLSAgICAgICAgaW1wb3J0RnVuY3Rpb24oaWR4KS0+
c2V0KHZtLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQorICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlv
bih1bnNpZ25lZCBpZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlv
bnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25zKClbaWR4XS5nZXQoKTsgfQogCiAgICAgSlNXZWJB
c3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICAv
LyBDYWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29tcGlsZS4KLSAgICB2b2lkIHNldE1l
bW9yeShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAgICB2b2lkIHNl
dE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVt
b3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQogICAgIFdhc206Ok1lbW9y
eU1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0K
IAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUp
IHsgbV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQogCiAgICAgaW50MzJfdCBsb2FkSTMy
R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQog
ICAgIGludDY0X3QgbG9hZEk2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbHMuZ2V0KClbaV07IH0KQEAgLTkwLDExICs3Myw2IEBAIHB1YmxpYzoKICAgICBkb3VibGUg
bG9hZEY2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91
YmxlPihsb2FkSTY0R2xvYmFsKGkpKTsgfQogICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkIGks
IGludDY0X3QgYml0cykgeyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9CiAKLSAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJy
aWVyPEpTQ2VsbD4pICogaWR4OwotICAgIH0KLQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNl
LCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQpAQCAtMTEzLDYgKzkx
LDkgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJy
aWVyPEpTT2JqZWN0Pio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9ucygpKTsgfQorCisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+
IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9k
dWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5
PiBtX21lbW9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggZjQxNDY3ZjRmYWFlOWRhYTA4MTY3NGU3ZjIwNTc4
ZDRjNWViNmYzYy4uYTJjZDM0NjEyYTZiOWU0YjJjOWQyMTFlZmQ4NDA5YTA0NjgwNWQ3NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKQEAgLTQyLDM1ICs0MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xh
c3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1vZHVs
ZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3Nl
bWJseU1vZHVsZSkgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6YnVpbGRDb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdhc206OlBsYW4m
IHBsYW4sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5TW9kZT4gbW9kZSkKK0pTV2ViQXNzZW1i
bHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291
cmNlLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogeworICAgIEFTU0VSVCghcGxhbi0+aGFz
V29yaygpKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
Ly8gT24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4K
LSAgICBwbGFuLnJ1bihtb2RlKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJv
cihleGVjLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOworICAgIGlmIChwbGFuLT5mYWlsZWQo
KSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgpLCBwbGFuLT5lcnJvck1lc3NhZ2UoKSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1vZGUpCi0gICAgICAg
IEFTU0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBjYWxsZWVDb3Vu
dCA9IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7Ci0gICAgYXV0byogY29kZUJsb2NrID0g
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB0aGlzLCBwbGFuLnRha2VDYWxsTGlu
a0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxlZUNv
dW50KTsKLQotICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCksCi0gICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0SlNFbnRyeXBv
aW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3
YXNtRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiBjb2RlQmxvY2s7
Ci19Ci0KLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQ4X3QqIHNv
dXJjZSwgc2l6ZV90IGJ5dGVTaXplKQotewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
ICBhdXRvKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5
TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBXVEZN
b3ZlKHNvdXJjZSkpOworICAgIG1vZHVsZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUocGxh
bikpOworICAgIHJldHVybiBtb2R1bGU7CiB9CiAKIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03OCw2MSArNjEsNDAgQEAgU3RydWN0dXJlKiBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlN
b2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYm
IHNvdXJjZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fc291cmNlQnVmZmVy
KHNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKQogewogfQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKLXsKLSAgICBXYXNtOjpNZW1vcnlNb2RlIG1v
ZGUgPSBtZW1vcnktPm1lbW9yeSgpLm1vZGUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY29k
ZUJsb2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3NbaV0tPmlzU2FmZVRvUnVuKG1lbW9yeSkpCi0gICAg
ICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tzW2ldLmdldCgpOwotICAgIH0KLQotICAgIEFTU0VS
VCghY29kZUJsb2NrRm9yKG1vZGUpKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9k
ZSwgd2UgbmVlZCB0byByZWNvbXBpbGUuLi4KLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVy
LT5ieXRlTGVuZ3RoKCkpOwotCi0gICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2so
dm0sIGV4ZWMsIHBsYW4sIG1vZGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwotCi0gICAgQVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5
bWJvbFRhYmxlLT5zaXplKCkpOwotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpCi0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGV4cCwgbV9leHBvcnRTeW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkp
OwotICAgIH0KLQotICAgIEFTU0VSVChtb2RlID09IGNvZGVCbG9jay0+bW9kZSgpKTsKLSAgICBj
b2RlQmxvY2tGb3IobW9kZSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIHJldHVybiBj
b2RlQmxvY2s7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXpl
KQordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0
cjxXYXNtOjpQbGFuPiYmIHBsYW4pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc291cmNlLCBi
eXRlU2l6ZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
b2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOworICAgIGZv
ciAoYXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHMpIHsKKyAgICAgICAgQVNT
RVJUKGV4cC5maWVsZC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7CisgICAgICAgIGV4
cC5maWVsZCA9IEF0b21pY1N0cmluZyhleHAuZmllbGQpOworICAgIH0KKyAgICBmb3IgKGF1dG8m
IGltcCA6IG1vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzKSB7CisgICAgICAgIEFTU0VSVChpbXAu
ZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBpbXAuZmllbGQg
PSBBdG9taWNTdHJpbmcoaW1wLmZpZWxkKTsKKyAgICAgICAgQVNTRVJUKGltcC5tb2R1bGUuaXNT
YWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBpbXAubW9kdWxlID0gQXRvbWlj
U3RyaW5nKGltcC5tb2R1bGUpOworICAgIH0KIAotICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxk
Q29kZUJsb2NrKHZtLCBleGVjLCBwbGFuKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCk7CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24p
OwogCiAgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBp
cyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVs
ZS4KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3Jl
YXRlKHZtKTsKLSAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7CisgICAgZm9y
IChhdXRvJiBleHAgOiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7CiAgICAgICAgIGF1
dG8gb2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoTm9Mb2Nr
aW5nTmVjZXNzYXJ5KTsKLSAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdO
ZWNlc3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KG9m
ZnNldCkpKTsKKyAgICAgICAgQVNTRVJUKGV4cC5maWVsZC5pbXBsKCktPmlzQXRvbWljKCkpOwor
ICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgc3RhdGlj
X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KGV4cC5maWVsZC5pbXBsKCkpLCBTeW1ib2xUYWJsZUVu
dHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgfQogCi0gICAgbV9zb3VyY2VCdWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZSwgYnl0ZVNpemUpOwotICAgIG1fbW9kdWxlSW5mb3Jt
YXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3ltYm9s
VGFibGUuc2V0KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7Ci0gICAgY29kZUJsb2NrRm9y
KGNvZGVCbG9jay0+bW9kZSgpKS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZvaWQg
SlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMzg5
ZTYzYTMzNWMxYzExN2I2OTc2OTcxMGM2M2JkN2Y4MzRlODZlNC4uYTQxNzg4NGRkNTExOTNjYmQw
YTZjNjJjZDY2OTFkMzE4ZjRhZTBlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNDgsMzUgKzQ4LDMyIEBAIGNsYXNz
IEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWZQ
dHI8QXJyYXlCdWZmZXI+JiYgc291cmNlLCBSZWZQdHI8V2FzbTo6UGxhbj4mJik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpOyB9Ci0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gdGFrZVJlc2VydmVkTWVt
b3J5KCkgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LnRha2VSZXNlcnZlZE1l
bW9yeSgpOyB9CiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsgfQogICAgIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSk7CiAgICAgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMg
bW9kdWxlIHdhcyBvcmlnaW5hbGx5IGNvbXBpbGVkIGV4cGVjdGluZyB0byB1c2UuIFRoaXMgd29u
J3QgbmVlZCB0byByZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJs
b2NrKCkgeyByZXR1cm4gY29kZUJsb2NrRm9yKG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5t
b2RlKCkpLmdldCgpOyB9Ci0gICAgLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY29kZSBibG9j
ayBmb3IgdGhlIGdpdmVuIG1lbW9yeSwgcG9zc2libHkgdHJpZ2dlcmluZyBhIHJlY29tcGlsZS4K
LSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBK
U1dlYkFzc2VtYmx5TWVtb3J5Kik7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJs
b2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19j
YXN0PHNpemVfdD4obW9kZSldLmdldCgpOyB9CisKKyAgICBBcnJheUJ1ZmZlciYgc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VCdWZmZXIuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihXYXNtOjpN
ZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KG1vZGUpXTsgfQotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJsb2NrKFZN
JiwgRXhlY1N0YXRlKiwgV2FzbTo6UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5TW9k
ZT4gbW9kZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIHVpbnQ4X3QqIHNvdXJjZSwg
c2l6ZV90IGJ5dGVTaXplKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJl
KiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
UmVmUHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CisgICAg
UmVmPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29u
c3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgV3Jp
dGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3NbV2FzbTo6TnVtYmVyT2ZN
ZW1vcnlNb2Rlc107CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYWMz
MTgxYjNmOWRjZWU0ZTEzM2IwODdmZjcxZjQ5MDE1ZTQ4OGQyZC4uYzcyMjBjYzRkZmMyYWE2ZDQ2
Mjg2NDA5OWMxYmMzNWE5NjQ5Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3Qu
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1i
bHlJbnN0YW5jZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmgiCkBAIC00NSw4ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmNv
bnN0cnVjdG9yVGFibGVXZWJBc3NlbWJseUluc3RhbmNlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvcikgfTsKIAogLyogU291cmNlIGZvciBXZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IubHV0LmgKQEAgLTU0LDI2OSArNTQsNTIgQEAgY29uc3Qg
Q2xhc3NJbmZvIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVu
Y3Rpb24iLCAmQmFzZTo6c18KICBAZW5kCiAgKi8KIAordXNpbmcgV2FzbTo6UGxhbjsKKwogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gSWYgbW9kdWxlT2JqZWN0
IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBpbnN0YW5jZSwgYSBUeXBlRXJyb3IgaXMgdGhy
b3duLgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNEeW5hbWljQ2FzdDxK
U1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWpz
TW9kdWxlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0
IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5N
b2R1bGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMt
PmFyZ3VtZW50KDApKSkpKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBqc0R5
bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwor
ICAgIGlmICghbW9kdWxlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJm
aXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1i
bHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShl
eGVjLT5hcmd1bWVudCgwKSkpKSk7CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0IHBhcmFt
ZXRlciBpcyBub3QgdW5kZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVj
dCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0gaW1wb3J0QXJn
dW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVmaW5lZCgp
ICYmICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5k
ZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBl
Rm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBi
ZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGlt
ZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBp
bnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwotCi0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0
ZUluc3RhbmNlKGV4ZWMsIGpzTW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJl
KSk7Ci19Ci0KLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNl
U3RydWN0dXJlKQotewotICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVsZS0+bW9kdWxlSW5mb3JtYXRp
b24oKTsKLQotICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVjdCogZXJyb3IpIHsKLSAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmlt
cG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwg
YSBUeXBlRXJyb3IgaXMgdGhyb3duLgotICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRz
LnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5z
dGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2Vt
Ymx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRzIikpKTsKLQotICAgIElkZW50aWZpZXIgbW9kdWxl
S2V5ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFtZShQcml2YXRlTmFtZTo6RGVzY3Jp
cHRpb24sICJXZWJBc3NlbWJseUluc3RhbmNlIikpOwotICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkKiBtb2R1bGVSZWNvcmQgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMs
IHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1v
ZHVsZUtleSwgbW9kdWxlSW5mb3JtYXRpb24pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7Ci0KLQotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUs
IGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIC8vIExldCBm
dW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2Fs
bGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQg
V2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgotICAgIC8vIExldCBpbXBv
cnRzIGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KLSAgICB1
bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUltcG9ydEds
b2JhbHMgPSAwOwotCi0gICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKLSAgICBib29s
IGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7Ci0gICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9k
dWxlLmltcG9ydHM6Ci0gICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5p
bXBvcnRzKSB7Ci0gICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2Yg
cGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KLSAgICAgICAgSlNW
YWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5t
b2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OwotICAgICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
ImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRp
bWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7Ci0KLSAgICAgICAgLy8gMy4gTGV0
IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQotICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUp
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0LmZpZWxk
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQot
ICAgICAgICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9u
IGltcG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMgZmFsc2UsIHRo
cm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1
bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBt
dXN0IGJlIGNhbGxhYmxlIikpKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0g
anNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOwotICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4g
RXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwotICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1i
bHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVu
Y3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRv
ZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5r
RXJyb3IuCi0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQotICAgICAgICAg
ICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1
cmVJbmRleCgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBp
bXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5k
ZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1
cmVdXS4KLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9u
LT5mdW5jdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24u
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwotICAgICAg
ICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlv
bidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5j
dGlvbidzIHNpZ25hdHVyZSIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpaWku
IE90aGVyd2lzZToKLSAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3IGhvc3Qg
ZnVuY3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5n
IFdlYkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEgVG9KU1Zh
bHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlhIFRvV2Vi
QXNzZW1ibHlWYWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMgcGFydCBvZiBQbGFu
IGNvbXBpbGF0aW9uLgotICAgICAgICAgICAgLy8gaXYuIEFwcGVuZCB2IHRvIGZ1bmNzLgotICAg
ICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3Qg
ZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5J
bnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbiku
Ci0KLSAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJ
bmRleCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0sIGZ1bmN0
aW9uLCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7Ci0gICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xv
c3VyZSB0byBpbXBvcnRzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEg
dmFsaWRhdGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEg
dGFibGUgaW1wb3J0KToKLSAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNz
ZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBh
IFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3Iu
Ci0gICAgICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJU
YWJsZSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsK
LQotICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7Ci0gICAgICAgICAgICB1aW50MzJfdCBhY3R1
YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFs
IDwgZXhwZWN0ZWRJbml0aWFsKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBp
bXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAg
ICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7Ci0gICAgICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhp
bXVtKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11
bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2Vy
IHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCi0gICAgICAgICAgICAv
LyBpaWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAv
LyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFoYXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFs
aWRhdGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5KTsKLSAgICAgICAgICAgIGhhc01lbW9yeUltcG9ydCA9IHRydWU7Ci0gICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2Vi
QXNzZW1ibHlNZW1vcnkqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBu
b3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KLSAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1v
cnkiKSkpOwotCi0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0g
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKLSAgICAgICAgICAgIFdhc206OlBh
Z2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7Ci0gICAg
ICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhh
dCBpcyB0b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4
cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKLSAg
ICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVt
b3J5KCkubWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZl
IGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11bSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBp
cyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgotICAg
ICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAg
ICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHsKLSAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgotICAgICAgICAg
ICAgLy8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBlRXJy
b3IuCi0gICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQu
a2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKLSAgICAg
ICAgICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBpcyBpNjQgb3IgVHlwZSh2KSBp
cyBub3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAg
IGlmIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUgPT0g
V2FzbTo6STY0KQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwg
Y2Fubm90IGJlIGFuIGk2NCIpKSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEg
bnVtYmVyIikpKTsKLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIFRvV2ViQXNzZW1ibHlWYWx1
ZSh2KSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0g
aW1wb3J0LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9u
Lmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewotICAgICAgICAgICAgY2FzZSBXYXNt
OjpJMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9i
YWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEds
b2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9G
bG9hdChleGVjKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBX
YXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRH
bG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGlmICghIW1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQo
KSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGltcG9y
dCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsK
LSAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVm
aW5pdGlvbi4KLSAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsKLSAgICAg
ICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSkK
LSAgICAgICAgICAgICAgICBtZW1vcnkgPSBqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVtb3J5KCk7
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1v
cnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZW1v
cnkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0
TWVtb3J5KHZtLCBleGVjLAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0
cnVjdHVyZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOwotICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9i
amVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXM6CisgICAgLy8g
MSkgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGluaXRpYWxpemVkIENvZGVCbG9jayAocnVu
bmFibGUpLCBzbyB3ZSBqdXN0IG5lZWQgdG8gZmluYWxpemVDcmVhdGlvbi4KKyAgICAvLyAyKSBU
aGUgaW5zdGFuY2UgaGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBhbmQg
Y29tcGlsZSB0aGUgY29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVhZHkg
aGFzIGFuIHVuaW5pdGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRo
ZSBjb21waWxhdGlvbiB0byBmaW5pc2guCisKKyAgICBpZiAoIWluc3RhbmNlLT5pbml0aWFsaXpl
ZCgpKSB7CisgICAgICAgIGlmIChpbnN0YW5jZS0+Y29kZUJsb2NrKCkpCisgICAgICAgICAgICBX
YXNtOjplbnN1cmVXb3JrbGlzdCgpLmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoaW5zdGFuY2Ut
PmNvZGVCbG9jaygpLT5wbGFuKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZjxX
YXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgp
LCBQbGFuOjpGdWxsQ29tcGlsZSwgUGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgICAgICAgICBw
bGFuLT5zZXRNb2RlKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpOworICAgICAgICAgICAgaW5zdGFu
Y2UtPmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKHZtLCBwbGFuLmNvcHlSZWYoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8mIHdvcmtsaXN0ID0gV2FzbTo6ZW5zdXJlV29ya2xpc3QoKTsKKyAgICAgICAg
ICAgIHdvcmtsaXN0LmVucXVldWUocGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgd29ya2xp
c3QuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdldCgpKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIHsKLSAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1h
dGlvbiAmJiBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpIHsK
LSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGltcG9ydCBvciB3
ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaGFzVGFibGVJbXBvcnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEhbW9kdWxl
SW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9u
LmlzSW1wb3J0KCkpOwotICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdz
IGEgVGFibGUgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFi
bGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksCi0gICAgICAgICAgICAg
ICAgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKLSAgICAgICAgICAgIC8vIFdl
IHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3
ZSd2ZSBkZWZpbmVkLgotICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBs
YXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAg
ICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
dGFibGUpOyAKLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNt
IHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0
byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwg
ZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCoobmV3IFdh
c206Ok1lbW9yeSgpKSkpKTsKLSAgICB9Ci0KLSAgICAvLyBHbG9iYWxzCi0gICAgewotICAgICAg
ICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1hdGlvbi5maXJzdEludGVy
bmFsR2xvYmFsKTsKLSAgICAgICAgZm9yIChzaXplX3QgZ2xvYmFsSW5kZXggPSBudW1JbXBvcnRH
bG9iYWxzOyBnbG9iYWxJbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHMuc2l6ZSgpOyAr
K2dsb2JhbEluZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBnbG9iYWwgPSBtb2R1bGVJ
bmZvcm1hdGlvbi5nbG9iYWxzW2dsb2JhbEluZGV4XTsKLSAgICAgICAgICAgIEFTU0VSVChnbG9i
YWwuaW5pdGlhbGl6YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOwotICAgICAg
ICAgICAgaWYgKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9t
R2xvYmFsSW1wb3J0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0
c09ySW1wb3J0TnVtYmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7Ci0gICAgICAgICAgICAgICAgaW5z
dGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xv
YmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0
aWFsQml0c09ySW1wb3J0TnVtYmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1vZHVsZVJl
Y29yZC0+bGluayhleGVjLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBudWxscHRyKTsKLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBtb2R1bGVSZWNv
cmQtPmR1bXAoKTsKLSAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFs
dWF0ZShleGVjKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7
CisgICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0
YW5jZSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA1OTcwOWY1MTc1NmRjNTVlYTJiZDI3ODY2MzUwNWU5ZTM5MzdmMDEzLi4zNTk5
NjIyZjJjYTI0OWIxZTFkODEyMGNhMzYzYWQ2MTRlNWE2ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcApAQCAtNzUsMTMgKzc1LDEzIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBidWZmCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBzaXplX3QgYnl0ZU9mZnNldDsKLSAgICBzaXplX3QgYnl0ZVNpemU7
Ci0gICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgYnVmZmVy
LCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2Ug
PSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBleGVjLCBzdHJ1Y3R1cmUs
IGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUmVmUHRyPFdhc206OlBsYW4+IHBs
YW4gPSBhZG9wdFJlZihuZXcgV2FzbTo6UGxhbih2bSwgKnNvdXJjZSwgV2FzbTo6UGxhbjo6VmFs
aWRhdGlvbiwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgaWYgKCFwbGFuLT5wYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKCkpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0dXJl
KCksIHBsYW4tPmVycm9yTWVzc2FnZSgpKSk7CisgICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpLCBXVEZN
b3ZlKHBsYW4pKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCmluZGV4IGZmZmVlNWMxMGY1OWY4MWYxYmJlM2NmMWQ1NDc3Y2Y5MGM2ODdmNzAuLmZiNTYx
ZDlkZGI4N2U3NDA3MjlhNjI5YjUxODYxNzA1NDkxNmJhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
QEAgLTczLDggKzczLDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBXYXNtCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBvcnRz
KQotICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRFbnRyeTo6Y3JlYXRlTG9jYWwoZXhwLmZp
ZWxkLCBleHAuZmllbGQpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9y
bWF0aW9uLmV4cG9ydHMpIHsKKyAgICAgICAgSWRlbnRpZmllciBmaWVsZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBleHAuZmllbGQpOworICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBv
cnRFbnRyeTo6Y3JlYXRlTG9jYWwoZmllbGQsIGZpZWxkKSk7CisgICAgfQogfQogCiB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkBAIC04NSwxNCArODcsMTMgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RhcnRGdW5jdGlvbik7CiB9CiAK
LXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0oc2NvcGUpOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGluc3RhbmNl
LT5tb2R1bGUoKTsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0
YW5jZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCkBAIC0xMTIs
NyArMTEzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUq
IGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgICAgIC8vICAgaWku
IChOb3RlOiBBdCBtb3N0IG9uZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGFueSBjbG9zdXJlLCBz
byBmdW5jIGlzIHVuaXF1ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2NjdXJyYW5jZXMg
aW4gdGhlIGxpc3QuIE1vcmVvdmVyLCBpZiB0aGUgaXRlbSB3YXMgYW4gaW1wb3J0IHRoYXQgaXMg
YWxyZWFkeSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0LCB0aGVuIHRoZSBvcmln
aW5hbCBmdW5jdGlvbiBvYmplY3Qgd2lsbCBiZSBmb3VuZC4gRm9yIGltcG9ydHMgdGhhdCBhcmUg
cmVndWxhciBKUyBmdW5jdGlvbnMsIGEgbmV3IHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLikKICAg
ICAgICAgICAgIGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rpb25JbXBvcnRDb3VudCkgewogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2luZEluZGV4OwotICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBvcnRG
dW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgSlNPYmplY3Qq
IGZ1bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgp
OwogICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5j
dGlvbkltcG9ydCkpCiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlv
bkltcG9ydDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTEyOCw3ICsxMjksNyBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBj
b25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZC5zdHJpbmco
KSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5j
dGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLCBpbnN0YW5jZSwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhCiAg
ICAgICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gZmFsc2U7CiAgICAgICAgIGJv
b2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSB0cnVlOwogICAgICAgICBib29sIHB1dFJlc3VsdCA9
IGZhbHNlOwotICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVF
bnZpcm9ubWVudCwgZXhlYywgZXhwLmZpZWxkLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1Jl
YWRPbmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOworICAgICAgICBz
eW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVsZCksIGV4cG9ydGVkVmFsdWUsIHNo
b3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHB1dFJlc3VsdCk7CiAgICAgfQogCkBAIC0xOTIsNyAr
MTkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgQVNTRVJUKCFzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSA9PSBXYXNtOjpWb2lkKTsKICAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
IDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgIEpTT2Jq
ZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rp
b25JbmRleFNwYWNlKS0+Z2V0KCk7CisgICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlv
biA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAg
ICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50
cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CkBAIC0yNTEsNyArMjUyLDcgQEAg
SlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
KQogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0
aW9uSW5kaWNlc1tpXTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29k
ZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNP
YmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1w
b3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgZnVuY3Rpb25JbXBvcnQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZXZlciBpbXBvcnQgYSBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiwgd2Ugc2V0IHRoZSBpbXBvcnQgYXMgdGhlIHVud3JhcHBlZCB2YWx1ZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5oCmluZGV4IDVkY2ViNDJkOGY4YzIwNjk4Mjk0YmFhMGM2YmJjZjQ5YjhkY2Q0
M2QuLjJiODM3MmU3YzdjMzM5NDc4ZTliZTc2NTE3N2ViODUyNDE2ZDQ3ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3Nl
bWJseUZ1bmN0aW9uOwogCiAvLyBCYXNlZCBvbiB0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc3Bl
Y2lmaWNhdGlvbgpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKICAgICBz
dGF0aWMgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0
cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
biYpOwogCi0gICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSop
OworICAgIHZvaWQgbGluayhFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUqKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9n
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDVmOWQ5YWMxYjFmYmJjZDVjYjkxZDdmYWViZTQ4
OWVkMDViNDhmOC4uNGMzOTc5NmYyOTI1NDBjYmY3YTc1YWJmZmI3NTRmMWYxYWMxOWUxZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAxNy0wMy0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogTWFrZSBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZS9jb21waWxlIHRydWx5IGFzeW5jaHJvbm91cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qczoKKyAg
ICAgICAgKGFzeW5jLnRlc3RQcm9taXNlQVBJKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWIt
YXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50aHJv
d0V4bik6CisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKHAuY2F0Y2gpOgorICAgICAg
ICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qczogQWRk
ZWQuCisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKHAuY2F0Y2gpOgorICAgICAgICAq
IHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qczoKKyAgICAgICAgKGFzc2Vy
dC5lcS5hc3luYy50ZXN0KToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAgICh0ZXN0LmFz
eW5jLnRlc3QpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQudHJ1dGh5LmFzeW5j
LnRlc3QpOiBEZWxldGVkLgorICAgICAgICAoYXNzZXJ0LnRydXRoeSk6IERlbGV0ZWQuCisKIDIw
MTctMDMtMjMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0pTQ10gVXNlIGpzTm9udHJpdmlhbFN0cmluZyBhZ3Jlc3NpdmVseSBmb3IgVG9TdHJpbmco
SW50NTIpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpz
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwppbmRleCBmMzQzYzZlOTNj
NzMxMjVlNDlhZDkzZjRhYTcyYTFhMDllNjllMmJiLi4zZDRkMjc4YmI0ZDg1OTRmNTI1NDMzYTky
Nzk0ZTJjMmZmZTQwMDlhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1j
b21waWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAg
LTEsNyArMSw4IEBACithc3luY1Rlc3QoNCk7CisKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcu
Li9hc3NlcnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKLWxl
dCBkb25lID0gZmFsc2U7CiBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICB7
CiAgICAgICAgIC8vIENhbid0IGRlY2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCkBAIC0xNCwz
OSArMTUsMzMgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAg
ICAuQ29kZSgpCiAgICAgICAgICAgICAuRW5kKCk7CiAKLSAgICAgICAgbGV0IHRocmV3ID0gZmFs
c2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAg
ICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3Rh
bmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0
aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBh
IG1lbW9yeSAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09
PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1v
cnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOworICAg
ICAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0LnRy
dXRoeSh0aHJldyk7CiAgICAgfQogCiAgICAgewotICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsK
ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoKTsK
ICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICB0aHJldyA9IHRydWU7CiAgICAgICAg
ICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOwogICAgICAgICAgICAg
YXNzZXJ0LmVxKGUubWVzc2FnZSwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlCdWZm
ZXJWaWV3IG9yIGFuIEFycmF5QnVmZmVyIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5jb21waWxl
KCknKSIpOworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7CiAgICAgfQogCiAgICAgewotICAgICAgICBsZXQgdGhy
ZXcgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5
LmNvbXBpbGUoMjApOwogICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIHRocmV3ID0g
dHJ1ZTsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcik7
CiAgICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBi
ZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFz
c2VtYmx5LmNvbXBpbGUoMjApJykiKTsKKyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwog
ICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsK
QEAgLTYwLDExICs1NSw4IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogCiAg
ICAgICAgIGxldCBtb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIGFzc2VydC50cnV0aHkobW9kdWxlIGluc3RhbmNl
b2YgV2ViQXNzZW1ibHkuTW9kdWxlKTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAg
fQotCi0gICAgZG9uZSA9IHRydWU7CiB9CiAKIHRlc3RQcm9taXNlQVBJKCk7Ci1kcmFpbk1pY3Jv
dGFza3MoKTsKLWFzc2VydC50cnV0aHkoZG9uZSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
anMtYXBpL3dlYi1hc3NlbWJseS1jb21waWxlLXBhcmFsbGVsLmpzIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjZhMzZm
YmRkZmQ1MjFjMmRkOTVlNjNmN2JlYWI0NWEzYjRhOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcwpAQCAtMCww
ICsxLDY1IEBACithc3luY1Rlc3QoMSk7CisKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnOworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisKK2FzeW5j
IGZ1bmN0aW9uIHRocm93RXhuKCkgeworICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCithc3lu
YyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0IGxvb3BEZXB0aCA9IDEwOworICAgIGNvbnN0
IG51bUNvbXBpbGF0aW9ucyA9IDE7CisgICAgY29uc3QgbnVtVmFycyA9IDMwOworICAgIGNvbnN0
IHBhcmFtcyA9IFtdOworICAgIHBhcmFtcy5sZW5ndGggPSBudW1WYXJzOworICAgIHBhcmFtcy5m
aWxsKCJpMzIiKTsKKworICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAg
ICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFt
cywgcmV0OiAiaTMyIiB9KTsKKworICAgIGNvbnN0IG1ha2VMb29wID0gKGJ1aWxkZXIsIGRlcHRo
KSA9PiB7CisgICAgICAgIGlmIChkZXB0aCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBidWls
ZGVyOworCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgICAgICAuTG9vcCgiaTMy
IiwgKGIpID0+IHsKKyAgICAgICAgICAgICAgICAgIGIuR2V0TG9jYWwoMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5JMzJTdWIoKQorICAg
ICAgICAgICAgICAgICAgICAuVGVlTG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkdldExv
Y2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAg
ICAuQnJJZigxKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTG9vcChiLCBkZXB0aCAt
IDEpLkJyKDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBidWlsZGVyCisKKyAg
ICB9CisKKyAgICBidWlsZGVyID0gbWFrZUxvb3AoYnVpbGRlciwgbG9vcERlcHRoKTsKKyAgICBi
dWlsZGVyID0gYnVpbGRlci5FbmQoKS5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKworICAgIGxldCBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IG51bUNvbXBpbGF0aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBp
bGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5LmNvbXBpbGUoYmluKSk7CisgICAgfQorCisgICAgYXdh
aXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKK30KKworbGV0IHAgPSB0ZXN0KCk7CitwLmNh
dGNoKChlKSA9PiB7CisgICAgcHJpbnQoIkZhaWxlZDogIiwgZSk7CisgICAgcHJpbnQoZS5zdGFj
ayk7Cit9KTsKK3AudGhlbigoKSA9PiBhc3luY1Rlc3RQYXNzZWQoKSk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVsLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRmNTc2NDk1Y2Y5NDg2ZjVkOTkwZjdmOTM3NjQzOWZiYzcwYmQ0YWEKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50
aWF0ZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsxLDgyIEBACithc3luY1Rlc3QoMSk7CisKK2ltcG9y
dCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0IEJ1aWxkZXIgZnJvbSAn
Li4vQnVpbGRlci5qcyc7CisKK2FzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgY29uc3QgbG9v
cERlcHRoID0gMTAwOworICAgIGNvbnN0IG51bUNvbXBpbGF0aW9ucyA9IDE7CisgICAgY29uc3Qg
bnVtVmFycyA9IDMwOworICAgIGNvbnN0IHBhcmFtcyA9IFtdOworICAgIHBhcmFtcy5sZW5ndGgg
PSBudW1WYXJzOworICAgIHBhcmFtcy5maWxsKCJpMzIiKTsKKworICAgIGxldCBidWlsZGVyID0g
KG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
CisgICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgeyBpbml0aWFsOiAwIH0pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtcywgcmV0OiAiaTMyIiB9
KTsKKworICAgIGNvbnN0IG1ha2VMb29wID0gKGJ1aWxkZXIsIGRlcHRoKSA9PiB7CisgICAgICAg
IGlmIChkZXB0aCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyOworCisgICAgICAg
IGJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgICAgICAuTG9vcCgiaTMyIiwgKGIpID0+IHsKKyAg
ICAgICAgICAgICAgICBiLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgxKQorICAgICAgICAgICAgICAgICAgICAuSTMyU3ViKCkKKyAgICAgICAgICAgICAgICAgICAg
LlRlZUxvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAgICAgLkJySWYoMSk7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb3AoYiwgZGVwdGggLSAxKS5CcigwKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICByZXR1cm4gYnVpbGRlcjsKKyAgICB9CisKKyAgICBidWlsZGVy
ID0gbWFrZUxvb3AoYnVpbGRlciwgbG9vcERlcHRoKTsKKyAgICBidWlsZGVyID0gYnVpbGRlci5F
bmQoKS5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDog
MCB9KTsKKyAgICBjb25zdCBpbXBvcnRPYmplY3QgPSB7ICJpbXAiOiB7ICJtZW1vcnkiOiBtZW1v
cnkgfSB9OworCisgICAgLy8gQ29tcGlsZSBhIGJ1bmNoIG9mIGluc3RhbmNlcyBpbiBwYXJhbGxl
bC4KKyAgICBsZXQgY29tcGlsYXRpb25zID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBu
dW1Db21waWxhdGlvbnM7ICsraSkgeworICAgICAgICBjb21waWxhdGlvbnMucHVzaChXZWJBc3Nl
bWJseS5pbnN0YW50aWF0ZShiaW4sIGltcG9ydE9iamVjdCkpOworICAgIH0KKworICAgIGxldCBb
aW5zdF0gPSBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworICAgIGxldCBtb2R1bGUg
PSBpbnN0Lm1vZHVsZTsKKworICAgIC8vIENvbXBpbGUgYSBidW5jaCBvZiBpbnN0YW5jZXMgZnJv
bSBtb2R1bGVzIGluIHBhcmFsbGVsLgorICAgIGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRp
b25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLCBpbXBvcnRPYmplY3QpKTsK
KyAgICB9CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworCisgICAgLy8g
Q29tcGlsZSBhbiBpbnN0YW5jZSBmcm9tIGEgbW9kdWxlIGluIHBhcmFsbGVsLCBoYXZlIHN5bmMg
Y29tcGlsYXRpb24gc3RlYWwgaXQuCisgICAgY29tcGlsYXRpb25zID0gW107CisgICAgY29tcGls
YXRpb25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLCBpbXBvcnRPYmplY3Qp
KTsKKyAgICBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0KTsKKworICAgIGF3YWl0IFByb21pc2UuYWxsKGNvbXBpbGF0aW9ucyk7Cit9CisKK2xldCBw
ID0gdGVzdCgpOworcC5jYXRjaCgoZSkgPT4geworICAgIHByaW50KCJGYWlsZWQ6ICIsIGUpOwor
ICAgIHByaW50KGUuc3RhY2spOworfSk7CitwLnRoZW4oKCkgPT4gYXN5bmNUZXN0UGFzc2VkKCkp
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlh
dGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcwpp
bmRleCBhOTNiYzYwNWZmMTdkZGVlODAxZjdhNzUzMzQxODZhODYxZDQ0MmFkLi43MmZjNDdlMjUy
ZGQ3NDRiY2YyMDg1YTk0ZjE2YmZhYmM1MGEwYzQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20v
anMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcwpAQCAtMSwzICsxLDUgQEAKK2FzeW5jVGVz
dCg3KTsKKwogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIApAQCAtMTksMTggKzIxLDE1IEBAIGFzc2Vy
dC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsK
ICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQge21vZHVsZSwgaW5zdGFu
Y2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKTsKICAgICAgICAgYXNzZXJ0
LnRydXRoeShtb2R1bGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Nb2R1bGUpOwogICAgICAgICBh
c3NlcnQudHJ1dGh5KGluc3RhbmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwog
ICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAotICAgIHRl
c3QoKTsKLSAgICBkcmFpbk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwor
ICAgdGVzdCgpOwogfQogCiB7CkBAIC00OCwxOSArNDcsMTYgQEAgYXNzZXJ0LmVxKFdlYkFzc2Vt
Ymx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1
bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwg
aW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBudWxsKTsKICAg
ICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAic2Vj
b25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlIG11c3QgYmUgdW5kZWZpbmVk
IG9yIGFuIE9iamVjdCAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBu
dWxsKScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIGFzeW5j
VGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFpbk1pY3JvdGFza3Mo
KTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC03OCwyMCArNzQsMTcgQEAg
YXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25z
dCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZh
bHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICBsZXQge21vZHVsZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUoYmluKTsKICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5
KGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IpOwotICAgICAgICAgICAgYXNz
ZXJ0LmVxKGUubWVzc2FnZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBj
b250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZSwgaW4gZnVuY3Rpb24gYXQg
aW5kZXggMCAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKScpIik7Cisg
ICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgdmFsaWRhdGU6IGNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAwIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBk
cmFpbk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC0x
MTAsMTkgKzEwMywxNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3Ro
LCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAot
ICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pOwogICAgICAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1w
b3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkgKGV2YWx1YXRpbmcg
J1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSknKSIpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFu
IGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAgIGRv
bmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAgICB0ZXN0
KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKIH0K
IAogewpAQCAtMTQxLDIwICsxMzEsMTcgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CiAgICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pOwogICAgICAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1w
b3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkgKGV2YWx1YXRpbmcg
J1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSknKSIpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFu
IGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAgIGRv
bmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAgICB0ZXN0
KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKIH0K
IAogewpAQCAtMTcyLDE4ICsxNTksMTUgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CiAgICAgICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAg
ICAgICAgIGxldCBpbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVs
ZSk7CiAgICAgICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eS5JbnN0YW5jZSk7CiAgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCks
IDEpOwotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAg
ICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50
cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTIwMiw3ICsxODYsNiBAQCBhc3NlcnQuZXEoV2ViQXNz
ZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMg
ZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlKDI1KTsKQEAgLTIxMCwxMCArMTkzLDggQEAgYXNzZXJ0LmVxKFdl
YkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAvLyBGSVhNRTog
QmV0dGVyIGVycm9yIG1lc3NhZ2UgaGVyZS4KICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3Nh
Z2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJh
eUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoMjUpJykiKTsKICAg
ICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7
CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2Vy
dC50cnV0aHkoZG9uZSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305450</attachid>
            <date>2017-03-27 00:17:31 -0700</date>
            <delta_ts>2017-03-27 00:27:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170327001730.patch</filename>
            <type>text/plain</type>
            <size>225907</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li5mN2E2MWM3ZjQ0MTM1NjBk
M2QzYjZkMTk2NDljMmU0NTViMDM0Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0KToK
KyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkKToKKyAgICAgICAgKGZ1bmN0aW9uVGVz
dFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1l
bnRzKToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb21pc2VEZWZlcnJlZC5oOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6
cHJvbWlzZUFzeW5jUGVuZGluZyk6CisgICAgICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1lci5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3Bw
LgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIpOgorICAgICAg
ICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcCk6CisgICAgICAgIChKU0M6OkpTUnVu
TG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1l
cjo6dGltZXJEaWRGaXJlKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIpOgorICAg
ICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1J1bkxvb3BUaW1lci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlBy
b21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcik6CisgICAgICAgIChKU0M6
OlByb21pc2VEZWZlcnJlZFRpbWVyOjpkb1dvcmspOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6cnVuUnVuTG9vcCk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRp
bWVyOjphZGRQZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRp
bWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJl
ZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVk
VGltZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2spOgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURl
ZmVycmVkVGltZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oLgorICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6c3RvcFJ1bm5p
bmdUYXNrcyk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAg
ICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwOgorICAgICAgICAoSlNDOjpyZWplY3QpOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6cmVz
b2x2ZSk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGls
ZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICog
d2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
cGxhbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnJ1bm5hYmxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZXJyb3JNZXNzYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FsbGVlcyk6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6Om1lbW9yeUtpbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBp
bGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246Omlu
dGVybmFsRnVuY3Rpb25Db3VudCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9u
OjpNZW1vcnlJbmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1heGltdW0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6aGFzUmVzZXJ2ZWRNZW1vcnkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6dGFrZVJl
c2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Om1vZGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5j
cHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFyc2VyKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFu
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OnN0YXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW92ZVRv
U3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpmYWlsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpUaHJlYWRDb3VudEhv
bGRlcjo6VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpUaHJl
YWRDb3VudEhvbGRlcjo6flRocmVhZENvdW50SG9sZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBs
ZXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6d2FpdEZvckNvbXBsZXRpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjYW5jZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjpydW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpl
eHBvcnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZU1vZHVsZUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZUNhbGxMaW5rSW5mb3MpOgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjp0YWtlV2FzbUV4aXRTdHVicyk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46Om1vZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzZXRNb2RlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6c2V0UGVuZGluZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpwZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnZtKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6ZmFpbGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzV29yayk6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Omhhc0JlZW5QcmVwYXJlZCk6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbklubGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5p
dGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpX
b3JrbGlzdDo6cHJpb3JpdHlTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
UXVldWVFbGVtZW50OjpuZXh0UHJpb3JpdHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21wbGV0ZVBsYW5T
eW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFu
c0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChKU0M6Oldhc206
OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjplbnN1cmVXb3Jr
bGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisgICAgICAgIChK
U0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29y
a2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbml0
aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9S
dW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNl
dE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVkKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1i
bHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBhZnRlciB3ZSBkbyBUTFMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODI2N2QwMzEwODZlNTU2MDljOGI5ZWU3NmMy
OTVmN2IyN2FkM2MzZi4uOWVkYjliNzA5NmQyZDA5MDY2ZjJhYTQ1NjBkNzliYTI3ZGQxNTJiMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODQ5LDYgKzg0OSw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9PcGVyYXRpb25zLmNwcAogICAg
IHJ1bnRpbWUvT3B0aW9ucy5jcHAKICAgICBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAor
ICAgIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCiAgICAgcnVudGltZS9Qcm9wZXJ0
eURlc2NyaXB0b3IuY3BwCiAgICAgcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCiAgICAgcnVudGlt
ZS9Qcm9wZXJ0eVRhYmxlLmNwcApAQCAtOTQyLDYgKzk0Myw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgd2FzbS9XYXNtUGxhbi5jcHAKICAgICB3YXNtL1dhc21TaWduYXR1cmUu
Y3BwCiAgICAgd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisgICAgd2FzbS9XYXNtV29ya2xpc3QuY3Bw
CiAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2
MDAzMTBjMzdhYjE0YTcyZGY1N2FiMjkxYzgyY2E3NDAzNzgzYzBkLi5lYmE0YzMyMDdiZDNmYmI2
M2EyYzBiMzhhNjI3OTg1OGRhZDNkZTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTMxNiwxMSArMTMxNiwxNyBAQAogCQk1MkM5NTJCOTE5QTI4QTFDMDA2OUIzODYgLyogVHlw
ZVByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovOyB9Owog
CQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMz
NUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLzsg
fTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2
QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzBGQjMwMjFF
N0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdv
cmtsaXN0LmggKi87IH07CisJCTUzMEZCMzA0MUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMw
RkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi87IH07CiAJCTUzMTM3
NEJEMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21Q
bGFuLmggKi87IH07CiAJCTUzMTM3NEJGMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCRTFE
NUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovOyB9OwogCQk1MzNCMTVERjFEQzdGNDYz
MDA0RDUwMEEgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQxRkM3MDFEQUMz
M0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcg
LyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0Mw
MEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OworCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzNDYzODcz
MUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyog
SlNSdW5Mb29wVGltZXIuY3BwICovOyB9OworCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyog
UHJvbWlzZURlZmVycmVkVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5oICovOyB9OworCQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVy
cmVkVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAq
LzsgfTsKIAkJNTM0ODZCQjcxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQjYxQzE3OTVD
MzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFB1YmxpYywgKTsgfTsgfTsKIAkJNTM0ODZCQkIxQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRB
cnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJNTM0
OTAyODUxQzcyNzZCNzAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ5MDI4MjFDNzI0MkM4MDAxMkJD
QjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLzsgfTsKQEAgLTEzNTUsNiArMTM2MSw3IEBACiAJ
CTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5jcHAgKi87IH07CiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5J
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CiAJCTUz
RkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAv
KiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9
OwogCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQx
MUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwpAQCAt
MjIzMyw4ICsyMjQwLDYgQEAKIAkJQzJDRjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3Jh
cHBlck9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi87
IH07CiAJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUMwMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKIAkJQzJEQTc3ODMx
OEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4
RCAvKiBIZWFwVGltZXIuY3BwICovOyB9OwotCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyog
SGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDExNkJBRUVFOTAwMTg3
QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5jcHAgKi87IH07CiAJCUMyRkNBRTEwMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAg
Ki87IH07CiAJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBE
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzgwMCwxMSArMzgwNSwxNyBAQAog
CQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwRkIz
MDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBsYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QbGFuLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8q
IFdhc21PcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyog
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3MTFE
QUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
NDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1J1bkxvb3BUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSdW5Mb29wVGltZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEg
LyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJvbWlzZURlZmVycmVkVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQjYxQzE3OTVDMzAwRjZGM0FG
IC8qIEpTVHlwZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5
cGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQkExQzE4RTg0
NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1R5cGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzQ5MDI4MjFDNzI0MkM4MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFR5cGVkQXJyYXlDVGVzdC5jcHA7IHBhdGgg
PSBBUEkvdGVzdHMvVHlwZWRBcnJheUNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM4NDUsNiArMzg1Niw3IEBACiAJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21N
b2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTYxRDVB
N0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9u
QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBsYW5JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUyMUNGMzgwMzkw
MDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVM
b2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc4OCw4ICs0ODAw
LDYgQEAKIAkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQVBJV3JhcHBlck9i
amVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDRjM5QzAxNkUxNUE4MTAw
REQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFRpbWVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVGltZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVj
dHVyZVJhcmVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
cnVjdHVyZVJhcmVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FF
MEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2Rl
QmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkwNCw4ICs1OTE0
LDYgQEAKIAkJCQlBNTRDMkFBRjFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggKi8s
CiAJCQkJQTUzMTFDMzQxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3Bw
ICovLAogCQkJCUE1MzExQzM1MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVy
LmggKi8sCi0JCQkJQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8s
Ci0JCQkJQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAogCQkJCTBG
QURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUMyNUY4QkNCMTU3
NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLAogCQkJCUMyNUY4QkND
MTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLywKQEAgLTYyNzMsMTEg
KzYyODEsMTQgQEAKIAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5o
ICovLAogCQkJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJ
CQkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8sCisJCQkJNTNGOEQx
RkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovLAogCQkJCTUzRjQwRTg0
MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1
NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5
MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLywKIAkJCQk1M0ZGN0Y5QTFEQkZEMkI5MDBB
MjZDQ0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZD
Q0MgLyogV2FzbVZhbGlkYXRlLmggKi8sCisJCQkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8q
IFdhc21Xb3JrbGlzdC5jcHAgKi8sCisJCQkJNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTY0MzQsNiArNjQ0NSw4IEBACiAJCQkJMTRBMTU2MzAxMDk2NjM2NTAw
NkZBMjYwIC8qIERhdGVJbnN0YW5jZUNhY2hlLmggKi8sCiAJCQkJQkNEMjAzNDcwRTE3MTM1RTAw
MkM3RTgyIC8qIERhdGVQcm90b3R5cGUuY3BwICovLAogCQkJCUJDRDIwMzQ4MEUxNzEzNUUwMDJD
N0U4MiAvKiBEYXRlUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMx
IC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3NDFFNzBEREVDMDBG
MTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLywKIAkJCQkxNjk5NDhFREU2OEQ0MDU0
QjAxRUY3OTcgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEZFMDUwMEYx
QUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5jcHAgKi8sCiAJCQkJMEZFMDUwMTAx
QUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oICovLApAQCAtNjgyMiw2ICs2ODM1
LDggQEAKIAkJCQkwRjdDMzlGQzFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0SW5saW5l
cy5oICovLAogCQkJCUJDRDIwMkJGMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUu
Y3BwICovLAogCQkJCUJDRDIwMkMwMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUu
aCAqLywKKwkJCQk1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3Bw
ICovLAorCQkJCTUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICov
LAogCQkJCTcwQjBBOUQwMUE5QjY2MjAwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCAqLywKIAkJ
CQk1Mjc3NzNERDFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwICovLAogCQkJCTUy
QzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovLApAQCAtODExNiw2ICs4
MTMxLDcgQEAKIAkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNr
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8q
IFdhc21Xb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlC
NzgwMUUwMzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODIz
NSw2ICs4MjUxLDcgQEAKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxG
cmFtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFBy
b21pc2VEZWZlcnJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkVDOUJCNzFCN0VCMDdD
MDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTYy
RDc1NUQ3MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwQjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhl
YWRlcnMgKi8sCkBAIC04NTIxLDYgKzg1MzgsNyBAQAogCQkJCUUzRkY3NTMzMUQ5Q0VBMTgwMEM3
RTE2RCAvKiBET01KSVRHZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNUNBMTU0
MURCQzNBNUMwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzQzA4RTNDMURBNDFCODEwMDM5NDc4RiAvKiBET01KSVRQYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFNkY1NkRFMUU2NEVBRDYwMEQxNzgwMSAvKiBWTVRyYXBzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzdBRDgzQzFEQTQ5Mjg2MDBGM0Q0MTIgLyogRE9NSklUUGF0
Y2hwb2ludFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM3QUQ4M0QxREE0OTI4NjAwRjNE
NDEyIC8qIERPTUpJVFJlZy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjkwLDcgKzg3MDgsNiBAQAog
CQkJCUE1Mzk4RkFCMUM3NTBEQTQwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1NEMyQUIxMUM2NTQ0RjIwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1MzExQzM2MUM3N0NFQzUwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyog
SGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQwRTVFQTFFNDNEMzREMDAwNkFCMDgg
LyogR0NDb25kdWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQURFNjczMUQ0RDIzQkUwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAw
QkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtOTEzOSw2
ICs5MTU2LDcgQEAKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGOEQyMDAxRTgzODdENDAwRDIxMTE2
IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcw
ODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBLZXkuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTk1OCw2ICs5OTc2LDcgQEAKIAkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MEYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4
NTExMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhERjUxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUwRDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjUx
LDYgKzEwMjcwLDcgQEAKIAkJCQkxNEFEOTExNzFEQ0E5N0ZEMDAxNEY5RkUgLyogRXZhbENvZGVC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDczNDFFMjFEQzJDRTk2MDBBQTI5QkEgLyog
RXZhbEV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0OTgyMDMxODkxRDBCMDAw
ODFFNUI4IC8qIEV2ZW50TG9vcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzQ2Mzg3MzFFNzBE
MDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUx
QzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTgwQzE5QjFENzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjEyREUwRjE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9u
RnV6ei5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzI4LDcgKzEwMzQ4LDYgQEAKIAkJCQlBNTM5
OEZBQzFDNzUwREE2MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1NEMyQUIwMUM2NTQ0RUUwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhl
YXBUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBENDE0QkJEMjQ5MDBCRkUyNzIg
LyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQzIxNDMwODFD
QTMyRTU4MDAwQTg4NjkgLyogSUNTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
RTEwN0VDMzc2MDA0MjdBNDggLyogSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEw
NjUyLDYgKzEwNjcxLDcgQEAKIAkJCQk5OTJBQkNGOTFCRUE5QkQyMDA2NDAzQTAgLyogUmVtb3Rl
QXV0b21hdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNDFFNEU4NEE0
MDAzNTk1M0IgLyogUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0gaW4gU291cmNlcyAq
LywKIAkJCQk5OThFRDY3NDFCRUQ3MEFDMDBERDgwMTcgLyogUmVtb3RlQ29udHJvbGxhYmxlVGFy
Z2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNDYzODc3MUU3MUUwNkUwMEYxMkFDMSAvKiBQ
cm9taXNlRGVmZXJyZWRUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1
RUZEMDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5OTU1NjY4NjFFNEU4QjBGMDBBQUUxM0MgLyogUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk5MkY1NkI1MUU0RTg0QTgwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0
b3JDb2NvYS5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0FjdGl2aXR5Q2FsbGJhY2suaAppbmRleCBkZGVlMjU4M2U0OWU2Yjk2OTM5MDgwZTMzOGVi
NWE5OWMwNDBiOTJjLi5mYTdiNjRkYTljNDMxZjdmMDIxODE3YmI5NGE5NDk2ZjE2ZWMxNTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaApA
QCAtMjgsNyArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1lci5o
IgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
CiAjaWYgVVNFKENGKQpAQCAtNDAsOCArNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEZ1
bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7CiBjbGFzcyBIZWFwOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7
CiBwdWJsaWM6CisgICAgdHlwZWRlZiBKU1J1bkxvb3BUaW1lciBCYXNlOwogICAgIHN0YXRpYyBS
ZWZQdHI8RnVsbEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlRnVsbFRpbWVyKEhlYXAqKTsKICAg
ICBzdGF0aWMgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlRWRlblRpbWVyKEhlYXAq
KTsKIApAQCAtNzAsMjEgKzcxLDIxIEBAIHByb3RlY3RlZDoKIAogI2lmIFVTRShDRikKICAgICBH
Q0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQotICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAg
ICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVs
YXkoc19kZWNhZGUpCiAgICAgewogICAgIH0KICNlbGlmIFVTRShHTElCKQogICAgIEdDQWN0aXZp
dHlDYWxsYmFjayhWTSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJh
c2Uodm0pCiAgICAgICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxheShzX2Rl
Y2FkZSkKICAgICB7CiAgICAgfQogI2Vsc2UKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZt
KQotICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAs
IG1fZW5hYmxlZCh0cnVlKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFRpbWVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5NjEyOGQwMzgz
OGNhNGE3NDU1MGVkOTE2ZGY3N2EzMjVkNmI0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkhlYXBUaW1lci5oIgotCi0jaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCi0j
aW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNp
bmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShH
TElCKQotI2luY2x1ZGUgPGdsaWIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lm
IFVTRShDRikKLSAgICAKLWNvbnN0IENGVGltZUludGVydmFsIEhlYXBUaW1lcjo6c19kZWNhZGUg
PSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKLQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZt
KQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKLXsKLSAg
ICBzZXRSdW5Mb29wKHZtLT5oZWFwLnJ1bkxvb3AoKSk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpz
ZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5Mb29wKQotewotICAgIGlmIChtX3J1bkxvb3ApIHsK
LSAgICAgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdl
dCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFs
aWRhdGUobV90aW1lci5nZXQoKSk7Ci0gICAgICAgIG1fcnVuTG9vcC5jbGVhcigpOwotICAgICAg
ICBtX3RpbWVyLmNsZWFyKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChydW5Mb29wKSB7Ci0gICAg
ICAgIG1fcnVuTG9vcCA9IHJ1bkxvb3A7Ci0gICAgICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBz
aXplb2YoQ0ZSdW5Mb29wVGltZXJDb250ZXh0KSk7Ci0gICAgICAgIG1fY29udGV4dC5pbmZvID0g
dGhpczsKLSAgICAgICAgbV90aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgc19kZWNhZGUsIHNfZGVjYWRlLCAwLCAwLCBIZWFwVGltZXI6OnRp
bWVyRGlkRmlyZSwgJm1fY29udGV4dCkpOwotICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1
bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAg
fQotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQotewotICAgIHNldFJ1bkxvb3AoMCk7Ci19
Ci0KLXZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQq
IGNvbnRleHRQdHIpCi17Ci0gICAgSGVhcFRpbWVyKiB0aW1lciA9IHN0YXRpY19jYXN0PEhlYXBU
aW1lcio+KGNvbnRleHRQdHIpOwotICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsKLQotICAg
IFJlZlB0cjxWTT4gdm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOwotICAgIGlmICghdm0pIHsK
LSAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3Qg
Z2l2ZSB1cC4KLSAgICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0uZ2V0
KCkpOwotICAgICAgICB0aW1lci0+ZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgdGltZXItPm1fYXBp
TG9jay0+dW5sb2NrKCk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJs
ZSBpbnRlcnZhbEluU2Vjb25kcykKLXsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0
ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGludGVydmFsSW5T
ZWNvbmRzKTsKLSAgICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGltZXI6
OmNhbmNlbFRpbWVyKCkKLXsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3Rp
bWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHNfZGVjYWRlKTsKLSAgICBt
X2lzU2NoZWR1bGVkID0gZmFsc2U7Ci19Ci0KLSNlbGlmIFVTRShHTElCKQotCi1jb25zdCBsb25n
IEhlYXBUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKLQotc3RhdGlj
IEdTb3VyY2VGdW5jcyBoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMgPSB7Ci0gICAgbnVsbHB0ciwg
Ly8gcHJlcGFyZQotICAgIG51bGxwdHIsIC8vIGNoZWNrCi0gICAgLy8gZGlzcGF0Y2gKLSAgICBb
XShHU291cmNlKiwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBn
Ym9vbGVhbgotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHVzZXJEYXRhKTsKLSAgICB9
LAotICAgIG51bGxwdHIsIC8vIGZpbmFsaXplCi0gICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxs
YmFjawotICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfbWFyc2hhbGwKLX07Ci0KLUhlYXBUaW1lcjo6
SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX2FwaUxvY2soJnZtLT5h
cGlMb2NrKCkpCi0gICAgLCBtX3RpbWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJmhlYXBUaW1l
clNvdXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkpCi17Ci0gICAgZ19zb3VyY2Vfc2V0
X25hbWUobV90aW1lci5nZXQoKSwgIltKYXZhU2NyaXB0Q29yZV0gSGVhcFRpbWVyIik7Ci0gICAg
Z19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRh
KSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgIGF1dG8mIGhlYXBUaW1lciA9ICpzdGF0aWNfY2FzdDxI
ZWFwVGltZXIqPih1c2VyRGF0YSk7Ci0gICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKGhl
YXBUaW1lci5tX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSGVhcFRpbWVy
OjpzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICAgICAgaGVhcFRpbWVyLnRpbWVyRGlk
RmlyZSgpOwotICAgICAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci0gICAgfSwgdGhpcywg
bnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fdGltZXIuZ2V0KCksIGdfbWFpbl9jb250
ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkK
LXsKLSAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkpOwotfQotCi12b2lkIEhlYXBU
aW1lcjo6dGltZXJEaWRGaXJlKCkKLXsKLSAgICBtX2FwaUxvY2stPmxvY2soKTsKLQotICAgIGlm
ICghbV9hcGlMb2NrLT52bSgpKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95
ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIG1fYXBpTG9jay0+dW5sb2Nr
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIobV92bSk7Ci0gICAgICAgIGRvV29yaygpOwotICAgIH0KLQotICAgIG1fYXBpTG9j
ay0+dW5sb2NrKCk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBp
bnRlcnZhbEluU2Vjb25kcykKLXsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVy
LmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VT
RUNfUEVSX1NFQyk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRp
bWVyOjpjYW5jZWxUaW1lcigpCi17Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1l
ci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9T
RUMpOwotICAgIG1faXNTY2hlZHVsZWQgPSBmYWxzZTsKLX0KLSNlbHNlCi1IZWFwVGltZXI6Okhl
YXBUaW1lcihWTSogdm0pCi0gICAgOiBtX3ZtKHZtKQotewotfQotCi1IZWFwVGltZXI6On5IZWFw
VGltZXIoKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZv
aWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKLXsKLX0KLQotdm9pZCBIZWFwVGlt
ZXI6OmNhbmNlbFRpbWVyKCkKLXsKLX0KLSNlbmRpZgotICAgIAotCi19IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDcyYjQ3MWY2MGRiOGM2Mzc0YzU1MDE5OGQwYmU5ZTJmY2NhOGE2YjcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNF
KENGKQotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jZW5kaWYK
LQotI2lmIFVTRShHTElCKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNMb2NrOwotY2xhc3MgVk07Ci0KLWNsYXNzIEhl
YXBUaW1lciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxIZWFwVGltZXI+IHsKLXB1Ymxp
YzoKLSAgICBIZWFwVGltZXIoVk0qKTsKLSNpZiBVU0UoQ0YpCi0gICAgc3RhdGljIHZvaWQgdGlt
ZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKik7Ci0jZW5kaWYKLSAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZG9Xb3JrKCkgPSAwOwotCi0gICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbElu
U2Vjb25kcyk7Ci0gICAgdm9pZCBjYW5jZWxUaW1lcigpOwotICAgIGJvb2wgaXNTY2hlZHVsZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzU2NoZWR1bGVkOyB9Ci0KLSNpZiBVU0UoQ0YpCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7Ci0jZW5kaWYgLy8g
VVNFKENGKQotICAgIAotcHJvdGVjdGVkOgotICAgIFZNKiBtX3ZtOwotCi0gICAgUmVmUHRyPEpT
TG9jaz4gbV9hcGlMb2NrOwotICAgIGJvb2wgbV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07Ci0jaWYg
VVNFKENGKQotICAgIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKLQotICAg
IFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKLSAgICBSZXRhaW5QdHI8Q0ZS
dW5Mb29wUmVmPiBtX3J1bkxvb3A7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1f
Y29udGV4dDsKLQotICAgIExvY2sgbV9zaHV0ZG93bk11dGV4OwotI2VsaWYgVVNFKEdMSUIpCi0g
ICAgc3RhdGljIGNvbnN0IGxvbmcgc19kZWNhZGU7Ci0gICAgdm9pZCB0aW1lckRpZEZpcmUoKTsK
LSAgICBHUmVmUHRyPEdTb3VyY2U+IG1fdGltZXI7Ci0jZW5kaWYKLSAgICAKLXByaXZhdGU6Ci0g
ICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCmluZGV4IGNm
ZTg5Yjg3MDdjZWJjN2Y0YWY0ZDYzNTY2OTQxMWUxN2RjMGFjNTIuLjhjYmZhOWU4MDQwZGM2MWVm
YjAxOWIyMTQ1NTQ0NTVlMmZhODMxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcApAQCAtNDEsMTEgKzQxLDExIEBAIHN0YXRpYyBj
b25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciA9IDEuMCAvIHN3ZWVwVGltZVRvdGFsOwog
CiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcigpCiB7Ci0gICAgSGVhcFRp
bWVyOjpzY2hlZHVsZVRpbWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlwbGllcik7
CisgICAgQmFzZTo6c2NoZWR1bGVUaW1lcihzd2VlcFRpbWVTbGljZSAqIHN3ZWVwVGltZU11bHRp
cGxpZXIpOwogfQogCiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihIZWFw
KiBoZWFwKQotICAgIDogSGVhcFRpbWVyKGhlYXAtPnZtKCkpCisgICAgOiBCYXNlKGhlYXAtPnZt
KCkpCiAgICAgLCBtX2N1cnJlbnRBbGxvY2F0b3IobnVsbHB0cikKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgKaW5kZXggMzRmYTg4Y2My
ZWZhNzVjNGYyOGMwNTdjNzg5YTZhZTExOTgwM2JlNi4uZGYxY2ZjOTI0OTZhN2RhNDY2MTBlYWEy
Zjc1NmZkM2NhNWFiNWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5j
cmVtZW50YWxTd2VlcGVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMyw4ICszMyw5IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKIAotY2xh
c3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBJbmNyZW1l
bnRhbFN3ZWVwZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHR5cGVk
ZWYgSlNSdW5Mb29wVGltZXIgQmFzZTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBJ
bmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
dGFydFN3ZWVwaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dG9wSWZOZWNlc3NhcnlUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9w
SWZOZWNlc3NhcnlUaW1lci5jcHAKaW5kZXggNmUzMTc2YzJjYzc2YjY4NDRjM2FmZWIwNzNjNmJj
YTEzZjQ1ZDNjYy4uOTQwZDM5ZGUyNGFjZmQzMmQ5NmE0YWMyMWVkMmMyYTUzMTdjMjFjZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVy
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIFN0b3BJZk5lY2Vzc2Fy
eVRpbWVyOjpTdG9wSWZOZWNlc3NhcnlUaW1lcihWTSogdm0pCi0gICAgOiBIZWFwVGltZXIodm0p
CisgICAgOiBCYXNlKHZtKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAppbmRleCBhNjgzMTg0NzQ4OWM4NmMzNmI2ODllMThk
YTA0ODYzYTFlNGVlNDQ1Li5mZWJmNTE2YWY1NDg0YjBjYmQwODA2ZDRjYzM0OWQ5NzQ5N2JmMjQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmgKQEAgLTI1LDE0ICsyNSwxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhl
YXBUaW1lci5oIgorI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIZWFwOwogCi1jbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lciA6IHB1YmxpYyBI
ZWFwVGltZXIgeworY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSlNSdW5Mb29w
VGltZXIgewogcHVibGljOgorICAgIHR5cGVkZWYgSlNSdW5Mb29wVGltZXIgQmFzZTsKICAgICBl
eHBsaWNpdCBTdG9wSWZOZWNlc3NhcnlUaW1lcihWTSopOwogICAgIAogICAgIHZvaWQgZG9Xb3Jr
KCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJv
bmdJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgK
aW5kZXggNmI4MTk3YzY4NjZhMDU5OTViMzJhODhiZTc5NDFkZDBmZDFiOTBhNi4uMjA1ZmIwNGZi
NjkxNDdkOGZkNWU3MmFlMTBhMDMyZDUxZTEzZDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0cm9uZ0lubGluZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGFkNGEzMTQwOGE2YjM1YjI5ZDNj
NTRiOTFhMzY5MGU1ZTUwMTBhNDcuLjNhMzhkY2Q5Nzg0ZmE1ZTk3YzRmZGQ5MzcyNzQ0M2ZmNTAy
YTAzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgogI2luY2x1ZGUg
IlByb2ZpbGVyRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgog
I2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUmVsZWFzZUhlYXBBY2Nlc3NT
Y29wZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKQEAgLTczLDggKzc0LDkgQEAK
ICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cu
aCIKICNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2FzbVBs
YW4uaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBsYW5JbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5j
bHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC05MDcsOCArOTA5LDggQEAgY29u
c3QgQ2xhc3NJbmZvIERPTUpJVEdldHRlckNvbXBsZXg6OnNfaW5mbyA9IHsgIkRPTUpJVEdldHRl
ckNvbXBsZXgiLCAmQmFzZTo6c18KIGNvbnN0IENsYXNzSW5mbyBET01KSVRGdW5jdGlvbk9iamVj
dDo6c19pbmZvID0geyAiRE9NSklURnVuY3Rpb25PYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERPTUpJVEZ1bmN0aW9uT2JqZWN0KSB9OwogY29uc3Qg
Q2xhc3NJbmZvIFJ1bnRpbWVBcnJheTo6c19pbmZvID0geyAiUnVudGltZUFycmF5IiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShSdW50aW1lQXJyYXkpIH07CiBj
b25zdCBDbGFzc0luZm8gU2ltcGxlT2JqZWN0OjpzX2luZm8gPSB7ICJTaW1wbGVPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNpbXBsZU9iamVjdCkg
fTsKLXN0YXRpYyBib29sIHRlc3QyNjJBc3luY1Bhc3NlZCB7IGZhbHNlIH07Ci1zdGF0aWMgYm9v
bCB0ZXN0MjYyQXN5bmNUZXN0IHsgZmFsc2UgfTsKK3N0YXRpYyB1bnNpZ25lZCBhc3luY1Rlc3RQ
YXNzZXMgeyAwIH07CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgeyAw
IH07CiAKIEVsZW1lbnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewpAQCAt
MTA3Nyw2ICsxMDc5LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXQKICNlbmRpZgogCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1heEFyZ3VtZW50cyhFeGVj
U3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5
bmNUZXN0KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RX
YXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSopOwpAQCAtMTM0OSw2ICsxMzUzLDkgQEAgcHJv
dGVjdGVkOgogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibWF4QXJndW1lbnRzIiwgZnVuY3Rp
b25NYXhBcmd1bWVudHMsIDApOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXN5bmNUZXN0
IiwgZnVuY3Rpb25Bc3luY1Rlc3QsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzeW5j
VGVzdFBhc3NlZCIsIGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkLCAxKTsKKwogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJ0ZXN0V2FzbU1vZHVsZUZ1bmN0
aW9ucyIsIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMsIDApOwogI2VuZGlmCkBAIC0x
NzMyLDExICsxNzM5LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4
ZWNTdGF0ZSogZXhlYywgRklMRSogb3V0KQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHRlc3QyNjJB
c3luY1Rlc3QpIHsKKyAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMpIHsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgICAgICBpZiAodmFsdWUuaXNT
dHJpbmcoKSAmJiBXVEY6OmVxdWFsKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgp
LCAiVGVzdDI2MjpBc3luY1Rlc3RDb21wbGV0ZSIpKQotICAgICAgICAgICAgdGVzdDI2MkFzeW5j
UGFzc2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkgJiYgV1RGOjplcXVhbChhc1N0cmlu
Zyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRlc3QyNjI6QXN5bmNUZXN0Q29tcGxldGUi
KSkgeworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VzKys7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CkBA
IC0zMDQ5LDYgKzMwNTcsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoSlNDOjptYXhBcmd1bWVudHMpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkFzeW5jVGVzdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1ZhbHVlIG51bWJlck9mQXN5bmNQYXNzZXMgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAg
ICBpZiAoIW51bWJlck9mQXN5bmNQYXNzZXMuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFeHBlY3RlZCBmaXJzdCBhcmd1
bWVudCB0byBhIHVpbnQzMiIpKTsKKworICAgIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzID0gbnVt
YmVyT2ZBc3luY1Bhc3Nlcy5hc1VJbnQzMigpOworICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmlu
ZWQoKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVz
dFBhc3NlZChFeGVjU3RhdGUqKQoreworICAgIGFzeW5jVGVzdFBhc3NlcysrOworICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKK30KKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
c3RhdGljIENTdHJpbmcgdmFsdWVXaXRoVHlwZU9mV2FzbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHdhc21WYWx1ZSkKQEAgLTMxNTksMjEgKzMx
ODYsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0
V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqIGUKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpICE9IGZ1bmN0aW9uQ291bnQgKyAyKQogICAgICAgICBDUkFTSCgpOwogCi0gICAgV2Fz
bTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkp
LCBzb3VyY2UtPmxlbmd0aCgpKTsKLSAgICBwbGFuLnJ1bigpOwotICAgIGlmIChwbGFuLmZhaWxl
ZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIG1vZHVsZTogIiwgcGxh
bi5lcnJvck1lc3NhZ2UoKSk7CisgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJlZigq
bmV3IFdhc206OlBsYW4odm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2UtPnZlY3Rvcigp
KSwgc291cmNlLT5sZW5ndGgoKSwgV2FzbTo6UGxhbjo6RnVsbENvbXBpbGUsIFdhc206OlBsYW46
OmRvbnRGaW5hbGl6ZSkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFu
LmNvcHlSZWYoKSk7CisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0ZVBsYW5TeW5j
aHJvbm91c2x5KHBsYW4uZ2V0KCkpOworICAgIGlmIChwbGFuLT5mYWlsZWQoKSkgeworICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBsYW4tPmVycm9yTWVzc2Fn
ZSgpKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpZiAocGxhbi5pbnRlcm5hbEZ1
bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQorICAgIGlmIChwbGFuLT5pbnRlcm5hbEZ1
bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQogICAgICAgICBDUkFTSCgpOwogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgY2FsbGVlczsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBr
ZWVwQWxpdmU7CiAgICAgewogICAgICAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBVSU5UX01BWDsK
LSAgICAgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksCisgICAgICAgIHBsYW4tPmluaXRpYWxpemVDYWxsZWVzKAogICAgICAgICAgICAgWyZdICh1
bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgewogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsZWVJbmRleCB8fCAoY2FsbGVlSW5kZXggLSAx
ID09IGxhc3RJbmRleCkpOwogICAgICAgICAgICAgICAgIGNhbGxlZXMuYXBwZW5kKGpzRW50cnlw
b2ludENhbGxlZSk7CkBAIC0zMTgxLDcgKzMyMDksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSog
ZQogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAgICAgICAgICAg
fSk7CiAgICAgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4g
bW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24g
PSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbW9k
dWxlSW5mb3JtYXRpb24tPm1lbW9yeSk7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25Db3VudDsgKytpKSB7CkBAIC0zNjY2LDcgKzM2OTQsNyBAQCB2b2lkIENvbW1hbmRM
aW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItLXRlc3QyNjItYXN5bmMiKSkgewotICAgICAgICAg
ICAgdGVzdDI2MkFzeW5jVGVzdCA9IHRydWU7CisgICAgICAgICAgICBhc3luY1Rlc3RFeHBlY3Rl
ZFBhc3NlcysrOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMzczOCwy
MyArMzc2NiwzNCBAQCBpbnQgcnVuSlNDKENvbW1hbmRMaW5lIG9wdGlvbnMsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgV29ya2VyIHdvcmtlcihXb3JrZXJzOjpzaW5nbGV0b24oKSk7CiAgICAgCiAg
ICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKCZ2bSk7Ci0KICAgICBpbnQgcmVzdWx0OwotICAgIGlmIChvcHRpb25zLm1f
cHJvZmlsZSAmJiAhdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICB2bS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb2ZpbGVyOjpEYXRhYmFzZT4odm0p
OworICAgIGJvb2wgc3VjY2VzczsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNy
ZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSwgb3B0
aW9ucy5tX2FyZ3VtZW50cyk7Ci0gICAgZ2xvYmFsT2JqZWN0LT5zZXRSZW1vdGVEZWJ1Z2dpbmdF
bmFibGVkKG9wdGlvbnMubV9lbmFibGVSZW1vdGVEZWJ1Z2dpbmcpOwotICAgIGJvb2wgc3VjY2Vz
cyA9IGZ1bmModm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKG9wdGlvbnMubV9pbnRlcmFjdGl2
ZSAmJiBzdWNjZXNzKQotICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOworICAg
ICAgICBpZiAob3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikK
KyAgICAgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8
UHJvZmlsZXI6OkRhdGFiYXNlPih2bSk7CiAKLSAgICB2bS5kcmFpbk1pY3JvdGFza3MoKTsKLSAg
ICByZXN1bHQgPSBzdWNjZXNzICYmICh0ZXN0MjYyQXN5bmNUZXN0ID09IHRlc3QyNjJBc3luY1Bh
c3NlZCkgPyAwIDogMzsKKyAgICAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9i
YWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpz
TnVsbCgpKSwgb3B0aW9ucy5tX2FyZ3VtZW50cyk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0
UmVtb3RlRGVidWdnaW5nRW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVidWdnaW5nKTsK
KyAgICAgICAgc3VjY2VzcyA9IGZ1bmModm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGlmIChv
cHRpb25zLm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKKyAgICAgICAgICAgIHJ1bkludGVyYWN0
aXZlKGdsb2JhbE9iamVjdCk7CisKKyAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAg
fQorI2lmIFVTRShDRikKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+cnVuUnVuTG9vcCgp
OworI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKQotICAgICAgICBwcmludGYo
ImpzYyBleGl0aW5nICVkXG4iLCByZXN1bHQpOworICAgIHJlc3VsdCA9IHN1Y2Nlc3MgJiYgKGFz
eW5jVGVzdEV4cGVjdGVkUGFzc2VzID09IGFzeW5jVGVzdFBhc3NlcykgPyAwIDogMzsKKworICAg
IGlmIChvcHRpb25zLm1fZXhpdENvZGUpIHsKKyAgICAgICAgcHJpbnRmKCJqc2MgZXhpdGluZyAl
ZCIsIHJlc3VsdCk7CisgICAgICAgIGlmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcyAhPSBhc3lu
Y1Rlc3RQYXNzZXMpCisgICAgICAgICAgICBwcmludGYoIiBiZWNhdXNlIGV4cGVjdGVkOiAlZCBh
c3luYyB0ZXN0IHBhc3NlcyBidXQgZ290OiAlZCBhc3luYyB0ZXN0IHBhc3NlcyIsIGFzeW5jVGVz
dEV4cGVjdGVkUGFzc2VzLCBhc3luY1Rlc3RQYXNzZXMpOworICAgICAgICBwcmludGYoIlxuIik7
CisgICAgfQogCiAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlKSB7CiAgICAgICAgIGlmICghdm0u
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5zYXZlKG9wdGlvbnMubV9wcm9maWxlck91dHB1dC51dGY4
KCkuZGF0YSgpKSkKQEAgLTM3NjIsMjQgKzM4MDEsMjggQEAgaW50IHJ1bkpTQyhDb21tYW5kTGlu
ZSBvcHRpb25zLCBjb25zdCBGdW5jJiBmdW5jKQogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0g
ICAgaWYgKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkKLSAgICAgICAgcHJpbnRmKCJKU0Mg
RVhDRVBUSU9OIEZVWlo6IGVuY291bnRlcmVkICV1IGNoZWNrcy5cbiIsIG51bWJlck9mRXhjZXB0
aW9uRnV6ekNoZWNrcygpKTsKLSAgICBib29sIGZpcmVBdEVuYWJsZWQgPQotICAgIE9wdGlvbnM6
OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdCgpIHx8IE9wdGlvbnM6OmZpcmVFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enpBdE9yQWZ0ZXIoKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlRXhlY3V0
YWJsZUFsbG9jYXRpb25GdXp6KCkgJiYgKCFmaXJlQXRFbmFibGVkIHx8IE9wdGlvbnM6OnZlcmJv
c2VFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enooKSkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYRUNV
VEFCTEUgQUxMT0NBVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJP
ZkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKLSAgICBpZiAoT3B0aW9uczo6dXNl
T1NSRXhpdEZ1enooKSkgewotICAgICAgICBwcmludGYoIkpTQyBPU1IgRVhJVCBGVVpaOiBlbmNv
dW50ZXJlZCAldSBzdGF0aWMgY2hlY2tzLlxuIiwgbnVtYmVyT2ZTdGF0aWNPU1JFeGl0RnV6ekNo
ZWNrcygpKTsKLSAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQg
JXUgZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKCkpOwotICAg
IH0KLQotICAgIGF1dG8gY29tcGlsZVRpbWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygp
OwotICAgIFZlY3RvcjxDU3RyaW5nPiBjb21waWxlVGltZUtleXM7Ci0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IGNvbXBpbGVUaW1lU3RhdHMpCi0gICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQo
ZW50cnkua2V5KTsKLSAgICBzdGQ6OnNvcnQoY29tcGlsZVRpbWVLZXlzLmJlZ2luKCksIGNvbXBp
bGVUaW1lS2V5cy5lbmQoKSk7Ci0gICAgZm9yIChDU3RyaW5nIGtleSA6IGNvbXBpbGVUaW1lS2V5
cykKLSAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGls
ZVRpbWVTdGF0cy5nZXQoa2V5KSk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkKKyAgICAgICAg
ICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4i
LCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7CisgICAgICAgIGJvb2wgZmlyZUF0RW5h
YmxlZCA9CisgICAgICAgIE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdCgp
IHx8IE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdE9yQWZ0ZXIoKTsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmly
ZUF0RW5hYmxlZCB8fCBPcHRpb25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkp
KQorICAgICAgICAgICAgcHJpbnRmKCJKU0MgRVhFQ1VUQUJMRSBBTExPQ0FUSU9OIEZVWlo6IGVu
Y291bnRlcmVkICV1IGNoZWNrcy5cbiIsIG51bWJlck9mRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
Q2hlY2tzKCkpOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKSkgeworICAg
ICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGlj
IGNoZWNrcy5cbiIsIG51bWJlck9mU3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7CisgICAgICAg
ICAgICBwcmludGYoIkpTQyBPU1IgRVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAldSBkeW5hbWljIGNo
ZWNrcy5cbiIsIG51bWJlck9mT1NSRXhpdEZ1enpDaGVja3MoKSk7CisgICAgICAgIH0KKworICAg
ICAgICAKKyAgICAgICAgYXV0byBjb21waWxlVGltZVN0YXRzID0gSklUOjpjb21waWxlVGltZVN0
YXRzKCk7CisgICAgICAgIFZlY3RvcjxDU3RyaW5nPiBjb21waWxlVGltZUtleXM7CisgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQorICAgICAgICAgICAgY29tcGls
ZVRpbWVLZXlzLmFwcGVuZChlbnRyeS5rZXkpOworICAgICAgICBzdGQ6OnNvcnQoY29tcGlsZVRp
bWVLZXlzLmJlZ2luKCksIGNvbXBpbGVUaW1lS2V5cy5lbmQoKSk7CisgICAgICAgIGZvciAoQ1N0
cmluZyBrZXkgOiBjb21waWxlVGltZUtleXMpCisgICAgICAgICAgICBwcmludGYoIiU0MHM6ICUu
M2xmIG1zXG4iLCBrZXkuZGF0YSgpLCBjb21waWxlVGltZVN0YXRzLmdldChrZXkpKTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIGlmIChPcHRpb25zOjpnY0F0RW5kKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAppbmRleCA2OTY3
ZTAzYWZlMTU0MjQ0ZDFlMmQwY2IwM2E0NjEwODk0MDUwMWQ1Li4xZGEwNjAxZjg5NzhlMTBmZjg5
M2NhMzFlMWIzZThmYmRkMjUyYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAi
SlNQcm9taXNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtOTksMTEgKzEwMCwxNSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgY2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNW
YWx1ZSB2YWx1ZQogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIG1fcmVzb2x2ZS5n
ZXQoKSwgdmFsdWUpOworICAgIGJvb2wgd2FzUGVuZGluZyA9IGV4ZWMtPnZtKCkucHJvbWlzZURl
ZmVycmVkVGltZXItPmNhbmNlbFBlbmRpbmdQcm9taXNlKHRoaXMpOworICAgIEFTU0VSVF9VTlVT
RUQod2FzUGVuZGluZywgd2FzUGVuZGluZyA9PSBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyk7CiB9
CiAKIHZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgcmVhc29uKQogewogICAgIGNhbGxGdW5jdGlvbihleGVjLCBtX3JlamVjdC5nZXQoKSwgcmVh
c29uKTsKKyAgICBib29sIHdhc1BlbmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRp
bWVyLT5jYW5jZWxQZW5kaW5nUHJvbWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1Bl
bmRpbmcsIHdhc1BlbmRpbmcgPT0gbV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lk
IEpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIHJl
YXNvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlz
ZURlZmVycmVkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5oCmluZGV4IDI2ZjRhODJkMDhjYTAyMjBlZGQ1MTk2ODUyOTgyMmJjYWI5YWM2ZmQuLjA5
MjJhOTRkOTMzY2NlYzU5YTRhMTdmY2JkMjJjMzcyM2RhNTBjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaApAQCAtNTYsNiArNTYs
MTAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEV4ZWNTdGF0
ZSosIEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEV4ZWNTdGF0
ZSosIEV4Y2VwdGlvbiopOwogCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgcHJvbWlzZUFzeW5j
UGVuZGluZygpIHsgbV9wcm9taXNlSXNBc3luY1BlbmRpbmcgPSB0cnVlOyB9CisjZW5kaWYKKwog
cHJvdGVjdGVkOgogICAgIEpTUHJvbWlzZURlZmVycmVkKFZNJiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CkBA
IC02NCw2ICs2OCwxMCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEpTUHJvbWlzZURlZmVy
cmVkKFZNJik7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX3Byb21pc2VJc0FzeW5jUGVu
ZGluZyB7IGZhbHNlIH07CisjZW5kaWYKKwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9w
cm9taXNlOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Jlc29sdmU7CiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IG1fcmVqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2N2E5YzdiZWYzNDFmYjlmMDQx
ZjM5NWQ1MGFjNjFmNDk3NWI1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKworI2luY2x1ZGUgIkdDQWN0
aXZpdHlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3Ry
aW5nLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KKworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgSlNDIHsKKworI2lmIFVTRShDRikKKworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgSlNS
dW5Mb29wVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CisKK0pTUnVu
TG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwg
bV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQoreworICAgIHNldFJ1bkxvb3Aodm0tPmhlYXAucnVu
TG9vcCgpKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BS
ZWYgcnVuTG9vcCkKK3sKKyAgICBpZiAobV9ydW5Mb29wKSB7CisgICAgICAgIENGUnVuTG9vcFJl
bW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkp
OworICAgICAgICBtX3J1bkxvb3AuY2xlYXIoKTsKKyAgICAgICAgbV90aW1lci5jbGVhcigpOwor
ICAgIH0KKworICAgIGlmIChydW5Mb29wKSB7CisgICAgICAgIG1fcnVuTG9vcCA9IHJ1bkxvb3A7
CisgICAgICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGltZXJDb250
ZXh0KSk7CisgICAgICAgIG1fY29udGV4dC5pbmZvID0gdGhpczsKKyAgICAgICAgbV90aW1lciA9
IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc19kZWNh
ZGUsIHNfZGVjYWRlLCAwLCAwLCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250
ZXh0KSk7CisgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1l
ci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICB9Cit9CisKK0pTUnVuTG9vcFRp
bWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIHNldFJ1bkxvb3AoMCk7Cit9CisKK3ZvaWQg
SlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29u
dGV4dFB0cikKK3sKKyAgICBKU1J1bkxvb3BUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxKU1J1
bkxvb3BUaW1lcio+KGNvbnRleHRQdHIpOworICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsK
KworICAgIFJlZlB0cjxWTT4gdm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOworICAgIGlmICgh
dm0pIHsKKyAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KKyAgICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0uZ2V0KCkpOworICAgICAgICB0aW1lci0+ZG9Xb3JrKCk7CisgICAgfQorCisgICAgdGltZXIt
Pm1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0
TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsg
aW50ZXJ2YWxJblNlY29uZHMpOworICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOworfQorCit2b2lk
IEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXRO
ZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBz
X2RlY2FkZSk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorCisjZWxpZiBVU0UoR0xJ
QikKKworY29uc3QgbG9uZyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQg
KiAzNjUgKiAxMDsKKworc3RhdGljIEdTb3VyY2VGdW5jcyBKU1J1bkxvb3BUaW1lclNvdXJjZUZ1
bmN0aW9ucyA9IHsKKyAgICBudWxscHRyLCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwgLy8gY2hl
Y2sKKyAgICAvLyBkaXNwYXRjaAorICAgIFtdKEdTb3VyY2UqLCBHU291cmNlRnVuYyBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCisgICAgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxpemUKKyAg
ICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9t
YXJzaGFsbAorfTsKKworSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKyAg
ICA6IG1fdm0odm0pCisgICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCisgICAgLCBtX3Rp
bWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJkpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25z
LCBzaXplb2YoR1NvdXJjZSkpKSkKK3sKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdl
dCgpLCAiW0phdmFTY3JpcHRDb3JlXSBKU1J1bkxvb3BUaW1lciIpOworICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xl
YW4geworICAgICAgICBhdXRvJiBydW5Mb29wVGltZXIgPSAqc3RhdGljX2Nhc3Q8SlNSdW5Mb29w
VGltZXIqPih1c2VyRGF0YSk7CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHJ1bkxv
b3BUaW1lci5tX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSlNSdW5Mb29w
VGltZXI6OnNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBydW5Mb29wVGltZXIu
dGltZXJEaWRGaXJlKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9
LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19t
YWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworfQorCitKU1J1bkxvb3BUaW1lcjo6
fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkp
OworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoKQoreworICAgIG1fYXBp
TG9jay0+bG9jaygpOworCisgICAgaWYgKCFtX2FwaUxvY2stPnZtKCkpIHsKKyAgICAgICAgLy8g
VGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAg
ICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsKKyAgICAgICAgZG9Xb3JrKCk7
CisgICAgfQorCisgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BU
aW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVs
ZWQgPSB0cnVlOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cisg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rvbmlj
X3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVsZWQg
PSBmYWxzZTsKK30KKyNlbHNlCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZt
KQorICAgIDogbV92bSh2bSkKK3sKK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1l
cigpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUoKQoreworfQorCit2
b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKK3sKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworfQorI2VuZGlmCisgICAgCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgzZWNiOWNiYzQzYjgwZDMxZWY4YjZiMDQ5YzE3ZWY1YWM0ZmNi
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1
bkxvb3BUaW1lci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
TG9jazsKK2NsYXNzIFZNOworCitjbGFzcyBKU1J1bkxvb3BUaW1lciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxKU1J1bkxvb3BUaW1lcj4geworcHVibGljOgorICAgIEpTUnVuTG9vcFRp
bWVyKFZNKik7CisjaWYgVVNFKENGKQorICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1
bkxvb3BUaW1lclJlZiwgdm9pZCopOworI2VuZGlmCisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5KU1J1bkxvb3BUaW1lcigpOworICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7
CisKKyAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKKyAg
ICB2b2lkIGNhbmNlbFRpbWVyKCk7CisgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTY2hlZHVsZWQ7IH0KKworI2lmIFVTRShDRikKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKKyNlbmRpZiAvLyBVU0UoQ0YpCisKK3By
b3RlY3RlZDoKKyAgICBWTSogbV92bTsKKworICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsK
KyAgICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OworI2lmIFVTRShDRikKKyAgICBzdGF0
aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7CisKKyAgICBSZXRhaW5QdHI8Q0ZSdW5M
b29wVGltZXJSZWY+IG1fdGltZXI7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5M
b29wOworCisgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIExvY2sg
bV9zaHV0ZG93bk11dGV4OworI2VsaWYgVVNFKEdMSUIpCisgICAgc3RhdGljIGNvbnN0IGxvbmcg
c19kZWNhZGU7CisgICAgdm9pZCB0aW1lckRpZEZpcmUoKTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fdGltZXI7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKaW5kZXggZGE5OTZlYWEzYzZjY2I2MGJmMTA4YjY5OTczODQyNmY3MWE0OTY3
Yy4uYTBkOTEwOTBlNjJiY2RiMjY2MWMyODZkMzQ0NjcyN2M5MTUxNGU2NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtMjUyLDYgKzI1Miw3IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIG51bWJlck9mRlRMQ29t
cGlsZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDgsIDIpIC0gMSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJU
aHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZkZUTENvbXBpbGVyVGhy
ZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldvcmtlclRocmVhZHMoLTIsIDApLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZXYXNtQ29tcGlsZXJUaHJl
YWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVByb2ZpbGVyLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIs
IHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApAQCAtNDI4LDYgKzQyOSw5IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlQ29kZUNhY2hlLCB0cnVlLCBO
b3JtYWwsICJJZiBmYWxzZSwgdGhlIHVubGlua2VkIGJ5dGUgY29kZSBjYWNoZSB3aWxsIG5vdCBi
ZSB1c2VkLiIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9y
bWFsLCAiRXhwb3NlIHRoZSBXZWJBc3NlbWJseSBnbG9iYWwgb2JqZWN0LiIpIFwKKyAgICBcCisg
ICAgdihib29sLCBmYWlsVG9Db21waWxlV2ViQXNzZW1ibHlDb2RlLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgbm8gV2FzbTo6UGxhbiB3aWxsIHN1Y2Vzc2Z1bGx5IGNvbXBpbGUgYSBmdW5jdGlv
bi4iKSBcCisgICAgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhl
IGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmlt
dW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0
IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNt
IG1lbW9yeS4iKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9y
YWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIyMmQyNzJkNDAzZWQ3NzAwOTZhOTQwZjk4Y2U2MmE0ZDc5ZWZjYzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvbWlz
ZURlZmVycmVkVGltZXIuaCIKKworI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCisjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKK1Byb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcihW
TSYgdm0pCisgICAgOiBCYXNlKCZ2bSkKK3sKK30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1l
cjo6ZG9Xb3JrKCkKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7CisgICAgY2FuY2Vs
VGltZXIoKTsKKyAgICBpZiAoIW1fcnVuVGFza3MpCisgICAgICAgIHJldHVybjsKKworICAgIHdo
aWxlICghbV90YXNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHRp
Y2tldDsKKyAgICAgICAgVGFzayB0YXNrOworICAgICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2sp
ID0gbV90YXNrcy50YWtlTGFzdCgpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRG9p
bmcgd29yayBvbiBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgICAgIC8v
IFdlIG1heSBoYXZlIGFscmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMuCisgICAgICAgIGlm
IChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyh0aWNrZXQpKSB7CisgICAgICAgICAgICB0YXNr
KCk7CisgICAgICAgICAgICBtX3ZtLT5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gd2FpdGluZ1Rhc2tzID0gbV9ibG9ja2VkVGFza3MudGFrZSh0aWNrZXQpOwor
ICAgICAgICBmb3IgKGNvbnN0IFRhc2smIHVuYmxvY2tlZFRhc2sgOiB3YWl0aW5nVGFza3MpIHsK
KyAgICAgICAgICAgIHVuYmxvY2tlZFRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWlj
cm90YXNrcygpOworICAgICAgICB9CisgICAgfQorCisjaWYgVVNFKENGKQorICAgIGlmIChtX3Bl
bmRpbmdQcm9taXNlcy5pc0VtcHR5KCkgJiYgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9t
aXNlc0ZpbmlzaCkKKyAgICAgICAgQ0ZSdW5Mb29wU3RvcChtX3J1bkxvb3AuZ2V0KCkpOworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoQ0YpCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpydW5SdW5M
b29wKCkKK3sKKyAgICBBU1NFUlQoIW1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOworICAgIEFTU0VSVChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KTsKKyAgICBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFByb21pc2VzRmluaXNoID0gdHJ1ZTsK
KyAgICBDRlJ1bkxvb3BSdW4oKTsKK30KKyNlbmRpZgorCit2b2lkIFByb21pc2VEZWZlcnJlZFRp
bWVyOjphZGRQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBWZWN0b3I8
U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5kZW5jaWVzKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGVwZW5kZW5jaWVzLnNpemUoKTsgKytpKQorICAgICAgICBBU1NFUlQoZGVwZW5kZW5jaWVz
W2ldLmdldCgpICE9IHRpY2tldCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21p
c2VzLmFkZCh0aWNrZXQsIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4oKSk7CisgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5KSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJBZGRpbmcgbmV3
IHBlbmRpbmcgcHJvbWlzZTogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKKyAgICAgICAgZGVwZW5k
ZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPigqbV92bSwgdGlja2V0KSk7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEZNb3ZlKGRlcGVuZGVuY2llcyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgZGVwZW5kZW5jaWVz
IGZvciBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZFZlY3RvcihkZXBlbmRlbmNpZXMpOworICAgIH0KKworI2lmbmRl
ZiBOREVCVUcKKyAgICB0aWNrZXQtPnByb21pc2VBc3luY1BlbmRpbmcoKTsKKyNlbmRpZgorfQor
Citib29sIFByb21pc2VEZWZlcnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21p
c2VEZWZlcnJlZCogdGlja2V0KQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJl
bW92ZSh0aWNrZXQpOworCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIkNhbmNlbGluZyBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAg
YXV0byBibG9ja2VkVGFza3MgPSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7CisgICAgZm9y
IChjb25zdCBUYXNrJiB0YXNrIDogYmxvY2tlZFRhc2tzKQorICAgICAgICB0YXNrKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVX
b3JrU29vbihKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1h
a2VfdHVwbGUodGlja2V0LCBXVEZNb3ZlKHRhc2spKSk7CisgICAgaWYgKCFpc1NjaGVkdWxlZCgp
KQorICAgICAgICBzY2hlZHVsZVRpbWVyKDApOworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRp
bWVyOjpzY2hlZHVsZUJsb2NrZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiBibG9ja2luZ1RpY2tl
dCwgVGFzayYmIHRhc2spCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyhibG9j
a2luZ1RpY2tldCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9ibG9ja2VkVGFza3MuYWRkKGJsb2Nr
aW5nVGlja2V0LCBWZWN0b3I8VGFzaz4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQoV1RGTW92ZSh0YXNrKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzVlZjdlMWYxYzcwN2Y0ODE0MWFkYzI3ZTVjNGI5ODFiZTc2N2NkYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJl
ZFRpbWVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIu
aCIKKyNpbmNsdWRlICJTdHJvbmcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTUHJvbWlzZURlZmVycmVkOworY2xhc3MgVk07CitjbGFzcyBKU0NlbGw7
CisKK2NsYXNzIFByb21pc2VEZWZlcnJlZFRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CisKKyAgICBQcm9taXNl
RGVmZXJyZWRUaW1lcihWTSYpOworCisgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKKworICAg
IHZvaWQgYWRkUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25n
PEpTQ2VsbD4+JiYgZGVwZW5kZW5jaWVzKTsKKyAgICAvLyBKU1Byb21pc2VEZWZlcnJlZCBzaG91
bGQgaGFuZGxlIGNhbmNlbGluZyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVj
dGVkLgorICAgIGJvb2wgY2FuY2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqKTsK
KworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IFRhc2s7CisgICAgdm9pZCBzY2hl
ZHVsZVdvcmtTb29uKEpTUHJvbWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAgIC8vIEJsb2Nr
ZWQgdGFza3Mgc2hvdWxkIG9ubHkgYmUgcmVnaXN0ZXJlZCB3aGlsZSBob2xkaW5nIHRoZSBKUyBB
UEkgbG9jay4gSWYgd2UgZGlkbid0IHJlcXVpcmUgaG9sZGluZyB0aGUKKyAgICAvLyBKUyBBUEkg
bG9jayB0aGVuIHRoZXJlIG1pZ2h0IGJlIGEgcmFjZSB3aGVyZSB0aGUgcHJvbWlzZSB5b3UgYXJl
IHdhaXRpbmcgb24gaXMgcnVuIGJlZm9yZSB5b3VyIHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVk
LgorICAgIHZvaWQgc2NoZWR1bGVCbG9ja2VkVGFzayhKU1Byb21pc2VEZWZlcnJlZCosIFRhc2sm
Jik7CisKKyAgICB2b2lkIHN0b3BSdW5uaW5nVGFza3MoKSB7IG1fcnVuVGFza3MgPSBmYWxzZTsg
fQorI2lmIFVTRShDRikKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blJ1bkxvb3AoKTsK
KyNlbmRpZgorCitwcml2YXRlOgorICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0
b3I8U3Ryb25nPEpTQ2VsbD4+PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBMb2NrIG1fdGFza0xv
Y2s7CisgICAgYm9vbCBtX3J1blRhc2tzIHsgdHJ1ZSB9OworI2lmIFVTRShDRikKKyAgICBib29s
IG1fc2hvdWxkU3RvcFJ1bkxvb3BXaGVuQWxsUHJvbWlzZXNGaW5pc2ggeyBmYWxzZSB9OworI2Vu
ZGlmCisgICAgVmVjdG9yPHN0ZDo6dHVwbGU8SlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrPj4gbV90
YXNrczsKKyAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFRhc2s+PiBtX2Js
b2NrZWRUYXNrczsKK307CisKKworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAppbmRleCA4NTExNTQyYjc3ZGZjOGU2ZjJiZWFiZjFmODkzYzc3Mzlh
Yjc0YjM4Li5mZWUwYjMzOWVmMjU3MmE1YWVkMTFkYjg2YTExMTRjNDQ2YTE5YjdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAi
UGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlByb2dy
YW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1
ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNp
bmNsdWRlICJSZWdFeHBPYmplY3QuaCIKQEAgLTEwMyw2ICsxMDQsNyBAQAogI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3BlLmgiCiAjaW5jbHVkZSAi
Vk1JbnNwZWN0b3IuaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXYXRj
aGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFw
RGF0YS5oIgpAQCAtMTc3LDYgKzE3OSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcFZNRW50cnlGcmFtZShu
dWxscHRyKQogICAgICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9DYWxsZXIoKSkKKyAgICAs
IHByb21pc2VEZWZlcnJlZFRpbWVyKHN0ZDo6bWFrZV91bmlxdWU8UHJvbWlzZURlZmVycmVkVGlt
ZXI+KCp0aGlzKSkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGUodm1UeXBlID09IERlZmF1bHQg
PyB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSA6IG5ldyBBdG9taWNTdHJpbmdU
YWJsZSkKICAgICAsIHByb3BlcnR5TmFtZXMobnVsbHB0cikKICAgICAsIGVtcHR5TGlzdChuZXcg
QXJnTGlzdCkKQEAgLTM1Niw2ICszNTksMTEgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogCiBWTTo6flZNKCkKIHsKKyAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+
c3RvcFJ1bm5pbmdUYXNrcygpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoV2Fz
bTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQorICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlz
dCgpLnN0b3BBbGxQbGFuc0ZvclZNKCp0aGlzKTsKKyNlbmRpZgogICAgIGlmIChVTkxJS0VMWSht
X3dhdGNoZG9nKSkKICAgICAgICAgbV93YXRjaGRvZy0+d2lsbERlc3Ryb3lWTSh0aGlzKTsKICAg
ICBtX3RyYXBzLndpbGxEZXN0cm95Vk0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmlu
ZGV4IDlkODZhYTE5YTkzM2NlYTM4YWI1ZjAyMzE4NDQ1OWNiNjAxMGYzYjcuLjgxYjgyZTk5YTk0
ZGVkYjNjM2ExYzdjMjYzNjlmNmJjMmYyMDk4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaApAQCAtMTA2LDYgKzEwNiw3IEBAIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0aXZl
RXhlY3V0YWJsZTsKK2NsYXNzIFByb21pc2VEZWZlcnJlZFRpbWVyOwogY2xhc3MgUmVnRXhwQ2Fj
aGU7CiBjbGFzcyBSZWdpc3RlcjsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwpAQCAtMzgw
LDYgKzM4MSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9uY2VfZmxhZyBtX3dhc21TaWduYXR1cmVJ
bmZvcm1hdGlvbk9uY2VGbGFnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbj4gbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb247CiAjZW5kaWYKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UHJvbWlzZURlZmVycmVkVGltZXI+IHByb21pc2VEZWZlcnJlZFRpbWVyOwog
ICAgIAogICAgIEpTQ2VsbCogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdDsKICAg
ICBjb25zdCBDbGFzc0luZm8qIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3RDbGFz
c0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCmlu
ZGV4IGZjZGM4Y2RkYzRkYTY4ZGQ5ZGNlMTk5MGQ5ZDk5MTJlZGQyOWQ2NjguLmI1NDJiOTMzMTY5
YjAyNDI5NzgwN2RiZjhkNGFjZjc2ZjkxNzExM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC0zMywxMCArMzMsMTcgQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCisjaW5jbHVkZSAi
U3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVdv
cmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgogCit1
c2luZyBKU0M6Oldhc206OlBsYW47CisKIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNXZWJBc3NlbWJseSk7CkBAIC00NSw0NSArNTIs
MTYyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1
bmMoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdl
YkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSopOwogCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgQ2F0Y2hTY29wZSYgY2F0Y2hTY29wZSwgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2UpCit7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBj
YXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIGNhdGNo
U2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhjZXB0
aW9uLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21p
c2UoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21w
aWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyB0cnVseSBhc3luY2hy
b25vdXM6Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NjAxNgotICAgIEpTVmFsdWUgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6
Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIGlmIChFeGNlcHRp
b24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgY2F0Y2hT
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNl
LT5wcm9taXNlKCkpOwotICAgIH0KKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNy
ZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBWZWN0b3I8U3Ryb25n
PEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKKyAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxK
U0NlbGw+KHZtLCBnbG9iYWxPYmplY3QpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+
YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKworICAg
IFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCAqc291cmNlLCBQbGFuOjpW
YWxpZGF0aW9uLCBbc291cmNlLCBwcm9taXNlLCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRh
YmxlIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBw
bGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2Us
IFtzb3VyY2UsIHByb21pc2UsIGdsb2JhbE9iamVjdCwgcGxhbiA9IFdURk1vdmUocGxhbildICgp
IG11dGFibGUgeworICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgSlNW
YWx1ZSBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBn
bG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUoc291cmNl
KSwgV1RGTW92ZShwbGFuKSk7CisgICAgICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgIHByb21pc2UtPnJlc29sdmUoZXhl
YywgbW9kdWxlKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgbW9kdWxlKTsK
KyAgICAgICAgfSk7CisgICAgfSkpOworCisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1
ZXVlKFdURk1vdmUocGxhbikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+
cHJvbWlzZSgpKTsKIH0KIAorZW51bSBjbGFzcyBSZXNvbHZlIHsgV2l0aEluc3RhbmNlLCBXaXRo
TW9kdWxlQW5kSW5zdGFuY2UgfTsKK3N0YXRpYyB2b2lkIHJlc29sdmUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIFJlc29sdmUgZW50cmll
cykKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgaW5z
dGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMpOworICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSkgeworICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGVudHJpZXMgPT0gUmVzb2x2ZTo6V2l0aEluc3RhbmNl
KQorICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwor
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUpOworICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFu
Y2UiKSksIGluc3RhbmNlKTsKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1bHQp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFJlc29sdmUgZW50cmllcykKK3sKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgLy8gSW4gb3JkZXIgdG8g
YXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUuIFdlIGZpcnN0IGFsbG9jYXRl
IGl0cyBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvCisg
ICAgLy8gZ2VuZXJhdGluZyBhbnkgY29kZS4gSWYgd2UgZGlkbid0IGRvIHRoaXMgd2UgbWlnaHQg
Y2hvb3NlIHRvIGNvbXBpbGUgd2l0aCBTaWduYWxpbmcgbWVtb3J5IGJ1dCBhY3R1YWxseSBnZXQg
YSBCb251ZHMgQ2hlY2tpbmcKKyAgICAvLyBtZW1vcnkgdGhlbiBoYXZlIHRvIHJlY29tcGlsZS4K
KyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgaWYg
KHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlz
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9z
c2libGUgY2FzZXM6CisgICAgLy8gMSkgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGluaXRp
YWxpemVkIENvZGVCbG9jaywgc28gd2UgaGF2ZSBubyBtb3JlIHdvcmsgdG8gZG8uCisgICAgLy8g
MikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUg
YW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJl
YWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywgc28gc29tZW9uZSBlbHNlIGlzIGNv
bXBpbGluZyBjb2RlIGFuZCB3ZSBqdXN0IG5lZWQgdG8gd2FpdCBmb3IgdGhlbS4KKworICAgIGlm
IChpbnN0YW5jZS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBw
cm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIC8vIFRo
ZSBpbnN0YW5jZSBrZWVwcyB0aGUgbW9kdWxlIGFsaXZlLgorICAgIGRlcGVuZGVuY2llcy5hcHBl
bmQoU3Ryb25nPEpTQ2VsbD4odm0sIGluc3RhbmNlKSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVk
VGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7
CisKKyAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKSB7CisgICAgICAgIHZtLnByb21pc2VE
ZWZlcnJlZFRpbWVyLT5zY2hlZHVsZUJsb2NrZWRUYXNrKGluc3RhbmNlLT5jb2RlQmxvY2soKS0+
cGxhbigpLnBlbmRpbmdQcm9taXNlKCksIFsmdm0sIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUs
IGVudHJpZXNdICgpIHsKKyAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGluc3RhbmNl
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlz
ZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllcyk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEFTU0VSVCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsKKworICAgIC8v
IEZJWE1FOiBUaGlzIHJlcGFyc2VzIHRoZSBtb2R1bGUgaGVhZGVyLCB3aGljaCBzaG91bGRuJ3Qg
YmUgbmVjZXNzYXJ5LgorICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZt
LCBtb2R1bGUtPnNvdXJjZSgpLCBQbGFuOjpGdWxsQ29tcGlsZSwgW3Byb21pc2UsIGluc3RhbmNl
LCBtb2R1bGUsIGVudHJpZXNdIChQbGFuJiBwKSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+
c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50
cmllcywgcGxhbiA9IFdURk1vdmUocGxhbildICgpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHBs
YW4tPnZtKCk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnN0YW5jZS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHBy
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXMpOworICAgICAgICB9KTsKKyAgICB9KSk7
CisKKyAgICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJl
ZigpKTsKKyAgICBwbGFuLT5zZXRNb2RlKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpOworICAgIFdh
c206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKK30KKworc3RhdGlj
IHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVl
KHZtLCBleGVjLCBidWZmZXIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7CisK
KyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisK
KyAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKKyAgICBkZXBlbmRlbmNp
ZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsKKyAgICB2bS5wcm9t
aXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBl
bmRlbmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZt
LCAqc291cmNlLCBQbGFuOjpWYWxpZGF0aW9uLCBbc291cmNlLCBwcm9taXNlLCBpbXBvcnRPYmpl
Y3QsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAgICBSZWZQdHI8UGxh
bj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURlZmVycmVk
VGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJvbWlzZSwgaW1wb3J0
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMs
IGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3Vy
Y2UpLCBwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkp
IHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5zdGFudGlh
dGUodm0sIGV4ZWMsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBSZXNvbHZlOjpXaXRo
TW9kdWxlQW5kSW5zdGFuY2UpOworICAgICAgICB9KTsKKyAgICB9KSk7CisKKyAgICBXYXNtOjpl
bnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBjYXRjaFNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIEFQSSB0
cnVseSBhc3luY2hyb25vdXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjkxODcKLQogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBh
dXRvIHJlamVjdCA9IFsmXSAoKSB7Ci0gICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0
Y2hTY29wZS5leGNlcHRpb24oKTsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAg
IGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4
ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cHJvbWlzZS0+cHJvbWlzZSgpKTsKLSAgICB9OwotCiAgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVu
dCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBv
cnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZp
bmVkKCkgJiYgIWltcG9ydE9iamVjdCkgewpAQCAtOTMsMjkgKzIxNywxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICB9CiAKICAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQgPSBleGVjLT5hcmd1bWVu
dCgwKTsKLSAgICBKU1ZhbHVlIG1vZHVsZTsKLSAgICBib29sIGZpcnN0QXJndW1lbnRJc01vZHVs
ZSA9IGZhbHNlOwotICAgIGlmIChmaXJzdEFyZ3VtZW50LmluaGVyaXRzKHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjppbmZvKCkpKSB7Ci0gICAgICAgIGZpcnN0QXJndW1lbnRJc01vZHVsZSA9IHRy
dWU7Ci0gICAgICAgIG1vZHVsZSA9IGZpcnN0QXJndW1lbnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4
ZWMsIGZpcnN0QXJndW1lbnQsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigp
KQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgpOwotICAgIH0KLQotICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UgPSBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNy
ZWF0ZUluc3RhbmNlKGV4ZWMsIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4obW9kdWxlKSwg
aW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5z
dGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiByZWplY3QoKTsKLQotICAgIGlmIChmaXJzdEFyZ3VtZW50SXNNb2R1bGUpCi0g
ICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgaW5zdGFuY2UpOwotICAgIGVsc2UgewotICAg
ICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVND
SUlMaXRlcmFsKCJtb2R1bGUiKSksIG1vZHVsZSk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5jZSIp
KSwgaW5zdGFuY2UpOwotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7Ci0g
ICAgfQorICAgIGlmIChhdXRvKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlN
b2R1bGUqPih2bSwgZmlyc3RBcmd1bWVudCkpCisgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVj
LCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0aEluc3RhbmNlKTsK
KyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVBbmRJbnN0YW50aWF0ZSh2bSwgZXhlYywgcHJvbWlz
ZSwgZmlyc3RBcmd1bWVudCwgaW1wb3J0T2JqZWN0KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKIH0KQEAgLTEyOSw3ICsyMzQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21C
dWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVT
aXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
LSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwor
ICAgIFdhc206OlBsYW4gcGxhbih2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBQbGFu
OjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdo
dCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBz
b21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBs
YW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggZmU4YzNmM2JhMjBhNmZl
NjgxNWViMTQ0MGE1N2ZiZGMyMjliZmQ5Yy4uMDhhYmRiYzAyMWI4MThjMzk1NTk2MTY5YTFjZGEy
NDVkZTk4ZTUxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNDZWxs
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIlByb21pc2VE
ZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgogI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC0zOSwxNCArNDAs
MTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3Mg
SlNXZWJBc3NlbWJseU1lbW9yeTsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsKK30K
KwogY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFs
OwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5m
b3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5
TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIFdh
c206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxhbiwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpCiAgICAgewotICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6
ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpm
b3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZl
Y3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhpdFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQp
OworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkp
KSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgbW9kZSwgV1RGTW92ZShwbGFuKSwg
Y2FsbGVlQ291bnQpOwogICAgICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC01OSw3ICs2NCwxNiBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRT
dHVicy5zaXplKCk7IH0KICAgICBXYXNtOjpNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZS5nZXQoKTsgfQotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJs
eU1lbW9yeSopOworCisgICAgLy8gRG9uJ3QgY2FsbCBpbnRpYWxpemUgZGlyZWN0bHksIHRoaXMg
c2hvdWxkIGJlIGNhbGxlZCBmb3IgeW91LCBhcyBuZWVkZWQsIGJ5IEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluYWxpemVDcmVhdGlvbi4KKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBib29s
IGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gIW1fcGxhbjsgfQorCisgICAgV2FzbTo6UGxh
biYgcGxhbigpIGNvbnN0IHsgQVNTRVJUKCFpbml0aWFsaXplZCgpKTsgcmV0dXJuICptX3BsYW47
IH0KKworICAgIGJvb2wgcnVubmFibGUoKSBjb25zdCB7IHJldHVybiBpbml0aWFsaXplZCgpICYm
ICFtX2Vycm9yTWVzc2FnZTsgfQorICAgIFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgeyBBU1NFUlQo
IXJ1bm5hYmxlKCkpOyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKyAgICBib29sIGlzU2FmZVRv
UnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25zdDsKIAogICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKQogICAgIHsKQEAgLTg5LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywg
Y2FsbGVlKTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4q
IGNhbGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zm
c2V0T2ZDYWxsZWVzKCkpOwotICAgIH0KKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNh
bGxlZT4qIGNhbGxlZXMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2Vi
QXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2Fs
bGVlcygpKTsgfQogCiAgICAgdm9pZCogd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25l
ZCBpbXBvcnRJbmRleCkKICAgICB7CkBAIC0xMDEsNyArMTEyLDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJs
eU1vZHVsZSosIEJhZzxDYWxsTGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJz
PiYmLCBXYXNtOjpNZW1vcnlNb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7CisgICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBXYXNtOjpNZW1vcnlN
b2RlLCBSZWY8V2FzbTo6UGxhbj4mJiwgdW5zaWduZWQgY2FsbGVlQ291bnQpOwogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTEyNSw2ICsxMzYs
OSBAQCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFs
RmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBW
ZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOworICAgIC8vIFRoZSBw
bGFuIHRoYXQgaXMgY29tcGlsaW5nIHRoaXMgY29kZSBibG9jay4KKyAgICBSZWZQdHI8V2FzbTo6
UGxhbj4gbV9wbGFuOworICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBXYXNtOjpNZW1v
cnlNb2RlIG1fbW9kZTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBmYWM1
N2FkZGFmMDc0ZTlhOGNmZTYwNjMzMzVmMzBkYTJlOTZkM2EyLi5hYjcyMDBlZGQ1MzA0ZmEyYWNi
ZDQ5OWQ4MDVmM2QxZDk2YTE2Y2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0xNTcsNyArMTU3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3
aGlsZSAoMCkKIAotICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+Jik7CisgICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUqKTsKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBA
IC0yMjEsNiArMjIxLDcgQEAgcHJpdmF0ZToKIAogICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgUHJv
Y2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgVmVj
dG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0yNTgsOSArMjU5LDEwIEBAIHN0YXRpYyB2b2lk
IHN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFs
dWUqIGFyZykKICAgICAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Io
Vk0mIHZtLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK0IzSVJHZW5lcmF0b3I6OkIz
SVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5
TW9kZSBtb2RlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKIHsKQEAgLTQ4Niw3ICs0ODgsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKIHsKICAgICBBU1NFUlQobV9tZW1v
cnlCYXNlR1BSKTsKLSAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nKSB7CiAgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOwogICAgICAgICBBU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwg
cG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsK
QEAgLTUyMiw3ICs1MjQsNyBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5
cGUgb3ApCiAKIGlubGluZSBCMzo6S2luZCBCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpP
cGNvZGUgbWVtb3J5T3ApCiB7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9y
eU1vZGU6OlNpZ25hbGluZykKKyAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZykKICAgICAgICAgcmV0dXJuIHRyYXBwaW5nKG1lbW9yeU9wKTsKICAgICByZXR1cm4gbWVtb3J5
T3A7CiB9CkBAIC0xMjI4LDcgKzEyMzAsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbgogICAg
IGppdC5yZXQoKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRl
eHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVs
ZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLCB1bnNpZ25lZCBvcHRM
ZXZlbCkKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxh
dGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJ
bmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25l
ZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbUlu
dGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTEyMzYsNyArMTIzOCw3IEBAIEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KFZNJiB2bSwKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6
Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oJnZtKTsKIAogICAgIFByb2NlZHVyZSBwcm9jZWR1
cmU7Ci0gICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KHZtLCBpbmZvLCBwcm9jZWR1cmUsIHJlc3Vs
dC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOworICAgIEIzSVJHZW5lcmF0b3IgY29u
dGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBtb2RlKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIo
JnZtLCBjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBp
bmZvLCBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyk7CiAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IDI0OWQ1Nzgx
NGE5MjhjNGJmOTIwNmJjODUyNTY0YzM2Yzc4ODlhNGUuLmRlNTZhMWMzYjIzYzU3MDRmZTA1MzE5
YmQwYTg1YzMxZTc3ZjlhMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNDYWxsSGVscGVy
cy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogZXh0ZXJuICJDIiB2
b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwpAQCAtNDcsNyArNDgsNyBAQCBzdHJ1Y3QgQ29tcGls
YXRpb25Db250ZXh0IHsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwganNFbnRyeXBvaW50VG9XYXNt
RW50cnlwb2ludENhbGw7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29u
dGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3Qg
VmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qs
IGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIE1lbW9y
eU1vZGUsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCA5YTdhNjcy
OWE3MWZiZGYwNTE3NGExY2NjMTFhNTZmNjI3MWRjZWJjLi41NTY5NDM1ZjQxMmU2NmE2ZDc0OGMz
MzU4YmJkMTUzNTFjZTUyMjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oCkBAIC0xMDIsMTQgKzEwMiwxNCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VT
dHJpbmcoRXh0ZXJuYWxLaW5kIGtpbmQpCiB9CiAKIHN0cnVjdCBJbXBvcnQgewotICAgIElkZW50
aWZpZXIgbW9kdWxlOwotICAgIElkZW50aWZpZXIgZmllbGQ7CisgICAgU3RyaW5nIG1vZHVsZTsK
KyAgICBTdHJpbmcgZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWduZWQg
a2luZEluZGV4OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtp
bmQuCiB9OwogCiBzdHJ1Y3QgRXhwb3J0IHsKLSAgICBJZGVudGlmaWVyIGZpZWxkOworICAgIFN0
cmluZyBmaWVsZDsKICAgICBFeHRlcm5hbEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBraW5kSW5k
ZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4KIH07
CkBAIC0yNjAsNiArMjYwLDcgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICB9CiAK
ICAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIHVpbnQzMl90IGludGVybmFs
RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKTsgfQogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBmMmI5
NDExNWNiNjRmNjdjNmI1ODYxZGVkYzhjMmI5NTM3YzczYmEyLi5kNDIwNTYwYjcyNGU0YjQ2NTVk
MjZhYWNjYzdkNGNlMjFhZDRjYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMTE1LDcgKzExNSw3IEBAIGF1dG8gRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKG51bWJlck9mTG9jYWxzKSwgImNhbid0IGdldCBGdW5jdGlv
bidzIG51bWJlciBvZiBsb2NhbHMgaW4gZ3JvdXAgIiwgaSk7CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobnVtYmVyT2ZMb2NhbHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpLCAiRnVuY3Rpb24gc2VjdGlvbidzICIsIGksICJ0aCBsb2NhbCBncm91cCBjb3VudCBp
cyB0b28gYmlnICIsIG51bWJlck9mTG9jYWxzKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYWx1ZVR5cGUodHlwZU9mTG9jYWwpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIGxvY2Fs
J3MgdHlwZSBpbiBncm91cCAiLCBpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9j
b250ZXh0LmFkZExvY2FsKHR5cGVPZkxvY2FsLCBudW1iZXJPZkxvY2FscyksICJjYW4ndCBhZGQg
IiwgbnVtYmVyT2ZMb2NhbHMsICIgRnVuY3Rpb24gbG9jYWxzIGZyb20gZ3JvdXAgIiwgaSk7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZExvY2FsKHR5cGVPZkxvY2FsLCBudW1i
ZXJPZkxvY2FscykpOwogICAgIH0KIAogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VCb2R5KCkpOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAg
dWludDMyX3QgaW5kZXg7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGlu
ZGV4IGZvciBnZXRfbG9jYWwiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250
ZXh0LmdldExvY2FsKGluZGV4LCByZXN1bHQpLCAiY2FuJ3QgZ2V0X2xvY2FsIGF0IGluZGV4Iiwg
aW5kZXgpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChnZXRMb2NhbChpbmRleCwg
cmVzdWx0KSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTMwNCw3ICszMDQsNyBAQCBhdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwg
ImNhbid0IGdldCBzZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VY
UFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNldF9nbG9iYWwgdmFsdWUiKTsKICAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSkpOwotICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LnNldEdsb2JhbChpbmRleCwgdmFsdWUpOworICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgQ2FsbDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeS5oCmluZGV4IGQxM2QwYzY2MmY5ODlkM2VkZTRlNGRlMDlmMjI0NmNjNzk3
NjZhOWIuLjQ0ZGEwZGZjMTc4NGRkZjVjMDBkN2JiNTk0NjMwNmFlNjBhMmIyNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3Mg
Vk07CiBuYW1lc3BhY2UgV2FzbSB7CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhl
ciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
NjkzCi1lbnVtIGNsYXNzIE1lbW9yeU1vZGUgeworZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWlu
dDhfdCB7CiAgICAgQm91bmRzQ2hlY2tpbmcsCiAgICAgU2lnbmFsaW5nLAogICAgIE51bWJlck9m
TWVtb3J5TW9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IDhhYzA4NjYyNzhiNTEzOTNiNjY5ZWEwOWE3YjU0OGQ2
ZDlhNzZiMTQuLjU5MDlmZTNmZTgzYzE4ODI4OTI1NDM0ZGU2NTZhZGFhMDE0MTc3MmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmNwcApAQCAtNzQsNyArNzQsNyBAQCBQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVy
SW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaQogewogfQogCi1N
ZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVjb21w
aWxlTW9kZSwgYm9vbCBpc0ltcG9ydCkKK01lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1h
dGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wgaXNJbXBvcnQp
CiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAg
ICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKQEAgLTgyLDI4ICs4Miw2IEBAIE1lbW9yeUluZm9ybWF0
aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11CiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CiAgICAgQVNTRVJU
KCEhKnRoaXMpOwotCi0gICAgaWYgKCFyZWNvbXBpbGVNb2RlKSB7Ci0gICAgICAgIGlmICghaXNJ
bXBvcnQpIHsKLSAgICAgICAgICAgIGlmIChtYXhpbXVtICYmIG1heGltdW0uYnl0ZXMoKSA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZt
LCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyk7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeSk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11bSgpKTsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Jlc2VydmVkTWVtb3J5LT5tYXhpbXVtKCkuYnl0ZXMo
KSA9PSAwKTsKLSAgICAgICAgICAgICAgICBtX21vZGUgPSBtX3Jlc2VydmVkTWVtb3J5LT5tb2Rl
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWwsIG1heGltdW0s
IE1lbW9yeU1vZGU6OlNpZ25hbGluZyk7Ci0gICAgICAgICAgICBpZiAobV9yZXNlcnZlZE1lbW9y
eSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghISptX3Jlc2VydmVkTWVtb3J5KTsKLSAgICAg
ICAgICAgICAgICBtX21vZGUgPSBtX3Jlc2VydmVkTWVtb3J5LT5tb2RlKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fbW9kZSA9
IE1lbW9yeTo6bGFzdEFsbG9jYXRlZE1vZGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9tb2Rl
ID0gKnJlY29tcGlsZU1vZGU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmlu
ZGV4IDZkZTA3MGExMDQ1MmZmNmJiM2M1YzI1MDQxMWYxMGU5MTM4OWU0YTIuLmQxODJjNzNjZDY1
Mzg4Y2FkNjU5ZjU3ZmFlMGMzMjgzM2RlYWVjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC01NCwyMiArNTQsMTcgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoISp0aGlzKTsKICAgICB9CiAKLSAgICBNZW1vcnlJbmZv
cm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpv
cHRpb25hbDxNZW1vcnlNb2RlPiwgYm9vbCBpc0ltcG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRp
b24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KTsK
IAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAg
ICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KLSAgICBi
b29sIGhhc1Jlc2VydmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeTsg
fQotICAgIFJlZlB0cjxNZW1vcnk+IHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgQVNTRVJUKGhhc1Jl
c2VydmVkTWVtb3J5KCkpOyByZXR1cm4gbV9yZXNlcnZlZE1lbW9yeS5yZWxlYXNlKCk7IH0KLSAg
ICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIGlz
SW1wb3J0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQogCiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbml0aWFsOyB9CiAKIHByaXZhdGU6Ci0g
ICAgUmVmUHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9pbml0
aWFsIHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKLSAgICBNZW1vcnlNb2RlIG1f
bW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgYm9vbCBtX2lzSW1wb3J0
IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggMjFkMWQwYzdkMWVhYWIyZTcyY2IzN2U3OTEyNDU4ZDVmZDNl
NGMzZC4uZTczNmJiZjJmMTczMmFlMjg0ODQ0ZjM0ZTI5OTg4MzNjYjg2ODUyMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTE2Miwx
MSArMTYyLDExIEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxS
ZXN1bHQKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihtb2R1
bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBu
YW1lIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0
cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVy
LCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbik7Ci0gICAg
ICAgIGltcC5tb2R1bGUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fdm0sIG1vZHVsZVN0cmlu
Zyk7CisgICAgICAgIGltcC5tb2R1bGUgPSBtb2R1bGVTdHJpbmc7CiAKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVsZSAnIiwg
bW9kdWxlU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1l
VVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51
bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbiwgIiBp
biBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIiciKTsKLSAgICAgICAgaW1wLmZpZWxkID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7CisgICAgICAgIGltcC5maWVs
ZCA9IGZpZWxkU3RyaW5nOwogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGltcC5raW5kKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBv
cnQncyBraW5kIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CiAgICAgICAgIHN3aXRjaCAoaW1wLmtpbmQpIHsKQEAgLTMxNiw3ICszMTYs
NyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkg
LT4gUGFydGlhbFJlc3VsdAogICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKICAgICBBU1NF
UlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNv
dW50KTsKIAotICAgIG1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24o
Km1fdm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIG1fbW9kZSwgaXNJbXBv
cnQpOworICAgIG1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5p
dGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOwogICAgIHJldHVybiB7
IH07CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBv
cnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1
bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0
TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRMZW4pOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cG9ydE5hbWVzLmNvbnRhaW5zKGZpZWxkU3Ry
aW5nKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAg
ZXhwb3J0TmFtZXMuYWRkKGZpZWxkU3RyaW5nKTsKLSAgICAgICAgZXhwLmZpZWxkID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBmaWVsZFN0cmluZyk7CisgICAgICAgIGV4cC5maWVsZCA9
IGZpZWxkU3RyaW5nOwogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJu
YWxLaW5kKGV4cC5raW5kKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQn
cyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cC5raW5kSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4
cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aAppbmRleCBjOTYxOGI1N2NhNDIyZjAxZmU5Zjc5ZjRjMTc5NTFhMGViNmI3NTBlLi41MGEyODkz
NWVmMTNmOTYyMGZhMTU2ODQxNzZiMTdlODRkNjZjMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC00NCw5ICs0NCw5IEBAIHN0cnVjdCBN
b2R1bGVQYXJzZXJSZXN1bHQgewogY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxN
b2R1bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0s
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgc3RkOjpv
cHRpb25hbDxNZW1vcnlNb2RlPiBtb2RlKQorCisgICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29u
c3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogICAgICAgICA6
IFBhcnNlcih2bSwgc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCi0gICAgICAgICwgbV9tb2Rl
KG1vZGUpCiAgICAgewogICAgIH0KIApAQCAtNjYsNyArNjYsNiBAQCBwcml2YXRlOgogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVp
bnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBt
X3Jlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IG1fbW9kZSB7IHN0ZDo6bnVs
bG9wdCB9OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggYjY1NDI0OTI2NDgxMGFmZTA5YTE3MDk5
NTA0ZjU2MzBiZjg2NWNjNi4uYmEwZDQ4YTBlNzVjMWYxY2VjOTJlOTc1YzRiY2Y1ODAyY2ZhNTM0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNDIsNyArNDIs
NiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgog
I2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL051bWJlck9mQ29y
ZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N5c3Rl
bVRyYWNpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC01MCwz
MCArNDksNjUgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAKLVBsYW46OlBsYW4oVk0qIHZtLCBWZWN0
b3I8dWludDhfdD4gc291cmNlKQotICAgIDogUGxhbih2bSwgc291cmNlLmRhdGEoKSwgc291cmNl
LnNpemUoKSkKKworUGxhbjo6UGxhbihWTSYgdm0sIEFycmF5QnVmZmVyJiBzb3VyY2UsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKHZtLCByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2UuZGF0YSgpKSwgc291cmNlLmJ5dGVMZW5ndGgoKSwg
d29yaywgV1RGTW92ZSh0YXNrKSkKK3sKK30KKworUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1
aW50OF90PiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQor
ICAgIDogUGxhbih2bSwgc291cmNlLmRhdGEoKSwgc291cmNlLnNpemUoKSwgd29yaywgV1RGTW92
ZSh0YXNrKSkKIHsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKK1BsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9u
VGFzayYmIHRhc2spCiAgICAgOiBtX3ZtKHZtKQorICAgICwgbV9jb21wbGV0aW9uVGFzayh0YXNr
KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVu
Z3RoKQorICAgICwgbV9hc3luY1dvcmsod29yaykKK3sKK30KKworY29uc3QgY2hhciogUGxhbjo6
c3RhdGVTdHJpbmcoU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNh
c2UgU3RhdGU6OkluaXRpYWw6IHJldHVybiAiSW5pdGlhbCI7CisgICAgY2FzZSBTdGF0ZTo6VmFs
aWRhdGVkOiByZXR1cm4gIlZhbGlkYXRlZCI7CisgICAgY2FzZSBTdGF0ZTo6UHJlcGFyZWQ6IHJl
dHVybiAiUHJlcGFyZWQiOworICAgIGNhc2UgU3RhdGU6OkNvbXBpbGVkOiByZXR1cm4gIkNvbXBp
bGVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21wbGV0ZWQ6IHJldHVybiAiQ29tcGxldGVkIjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQbGFuOjpt
b3ZlVG9TdGF0ZShTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPiBtX3N0YXRlKTsK
KyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAibW92aW5nIHRvIHN0YXRlOiAiLCBzdGF0ZVN0cmlu
ZyhzdGF0ZSksICIgZnJvbSBzdGF0ZTogIiwgc3RhdGVTdHJpbmcobV9zdGF0ZSkpOworICAgIG1f
c3RhdGUgPSBzdGF0ZTsKK30KKwordm9pZCBQbGFuOjpmYWlsKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIsIFN0cmluZyYmIGVycm9yTWVzc2FnZSkKIHsKKyAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiZmFpbGluZyB3aXRoIG1lc3NhZ2U6ICIsIGVycm9yTWVzc2FnZSk7CisgICAgbV9lcnJv
ck1lc3NhZ2UgPSBXVEZNb3ZlKGVycm9yTWVzc2FnZSk7CisgICAgY29tcGxldGUobG9ja2VyKTsK
IH0KIAotYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVt
b3J5TW9kZT4gcmVjb21waWxlTW9kZSkKK2Jvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZSgpCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkluaXRpYWwpOworICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJzdGFydGluZyB2YWxpZGF0aW9uIik7CiAgICAgTW9ub3RvbmljVGlt
ZSBzdGFydFRpbWU7CiAgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRp
bWVzKCkpCiAgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCiAgICAg
ewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fdm0sIG1fc291cmNlLCBtX3Nv
dXJjZUxlbmd0aCwgcmVjb21waWxlTW9kZSk7CisgICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQ
YXJzZXIoJm1fdm0sIG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCk7CiAgICAgICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFwYXJzZVJlc3Vs
dCkgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBwYXJzZVJlc3VsdC5lcnJvcigpOwor
ICAgICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBXVEZNb3ZlKHBhcnNlUmVzdWx0LmVy
cm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBt
X21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlKTsKQEAgLTgy
LDUyICsxMTYsNDggQEAgYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4gcmVjb21waWxlTW9kZSkKICAgICB9CiAKICAgICBmb3IgKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6
ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFu
ZCBlbmRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhd
LmVuZCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9u
IHN0YXJ0aW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4
XS5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtm
dW5jdGlvbkluZGV4XS5lbmQpOwogICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlb
ZnVuY3Rpb25JbmRleF0uc3RhcnQ7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBt
X3NvdXJjZUxlbmd0aCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwg
c2lnbmF0dXJlSW5kZXgpOwogCi0gICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlk
YXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxp
ZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9Vbmlx
dWVkU2lnbmF0dXJlSW5kaWNlcyk7CiAgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgewog
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uU3RhcnRbaV0p
KSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5l
cnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlv
bkluZGV4KSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAgICAgICAgICAgIGZh
aWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCks
ICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgp
KSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJl
cG9ydENvbXBpbGVUaW1lcygpKQogICAgICAgICBkYXRhTG9nTG4oIlRvb2sgIiwgKE1vbm90b25p
Y1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNyb3NlY29uZHMoKSwgIiB1cyB0byB2YWxpZGF0
ZSBtb2R1bGUiKTsKKyAgICBpZiAobV9hc3luY1dvcmsgPT0gVmFsaWRhdGlvbikKKyAgICAgICAg
Y29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CisgICAgZWxzZQorICAgICAgICBtb3ZlVG9TdGF0
ZShTdGF0ZTo6VmFsaWRhdGVkKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gV2UgYXJlIGNy
ZWF0aW5nIGEgYnVuY2ggb2YgdGhyZWFkcyB0aGF0IHRvdWNoIHRoZSBtYWluIHRocmVhZCdzIHN0
YWNrLiBUaGlzIHdpbGwgbWFrZSBBU0FOIHVuaGFwcHkuCi0vLyBUaGUgcmVhc29uIHRoaXMgaXMg
T0sgaXMgdGhhdCB3ZSBndWFyYW50ZWUgdGhhdCB0aGUgbWFpbiB0aHJlYWQgZG9lc24ndCBjb250
aW51ZSB1bnRpbCBhbGwgdGhyZWFkcwotLy8gdGhhdCBjb3VsZCB0b3VjaCBpdHMgc3RhY2sgYXJl
IGRvbmUgZXhlY3V0aW5nLgotU1VQUFJFU1NfQVNBTiAKLXZvaWQgUGxhbjo6cnVuKHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4gcmVjb21waWxlTW9kZSkKK3ZvaWQgUGxhbjo6cHJlcGFyZSgpCiB7
Ci0gICAgaWYgKCFwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHJlY29tcGlsZU1vZGUpKQotICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlZhbGlkYXRlZCk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIHByZXBhcmF0aW9uIik7CiAKICAgICBUcmFj
ZVNjb3BlIHRyYWNlU2NvcGUoV2ViQXNzZW1ibHlDb21waWxlU3RhcnQsIFdlYkFzc2VtYmx5Q29t
cGlsZUVuZCk7CiAKLSAgICBpZiAocmVjb21waWxlTW9kZSkKLSAgICAgICAgQVNTRVJUKG1fbW9k
dWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCkgPT0gcmVjb21waWxlTW9kZSk7Ci0KICAgICBh
dXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6
ZSwgY29uc3QgY2hhciogd2hhdCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkZhaWxlZCBhbGxvY2F0aW5n
IGVub3VnaCBzcGFjZSBmb3IgIik7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihz
aXplKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdoYXQpOwotICAgICAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBmYWlsKGhvbGRM
b2NrKG1fbG9jayksIGJ1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDgsMTMxICsxNzgsMTU0
IEBAIHZvaWQgUGxhbjo6cnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVjb21waWxlTW9k
ZSkKICAgICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uSW5k
ZXggPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVyICIsIGlt
cG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIGltcG9ydC0+bW9kdWxlLCAiOiAiLCBpbXBvcnQtPmZp
ZWxkKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1
bmN0aW9uIG51bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVs
ZSwgIjogIiwgaW1wb3J0LT5maWVsZCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzLmF0KGltcG9ydC0+a2luZEluZGV4KTsKLSAgICAgICAgbV93YXNtRXhpdFN0dWJzLnVuY2hl
Y2tlZEFwcGVuZChleGl0U3R1YkdlbmVyYXRvcihtX3ZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25h
dHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CisgICAgICAgIG1fd2FzbUV4aXRTdHVi
cy51bmNoZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IoJm1fdm0sIG1fY2FsbExpbmtJbmZv
cywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEZ1bmN0aW9uSW5kZXgpKTsKICAgICB9CiAKLSAgICBt
X2N1cnJlbnRJbmRleCA9IDA7CisgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlByZXBhcmVkKTsKK30K
IAotICAgIGF1dG8gZG9Xb3JrID0gW3RoaXNdIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbklu
ZGV4ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsK
LSAgICAgICAgICAgIH0KKy8vIFdlIGRvbid0IGhhdmUgYSBzZW1hcGhvcmUgY2xhc3MuLi4gYW5k
IHRoaXMgZG9lcyBraW5kYSBpbnRlcmVzdGluZyB0aGluZ3MuCitjbGFzcyBQbGFuOjpUaHJlYWRD
b3VudEhvbGRlciB7CitwdWJsaWM6CisgICAgVGhyZWFkQ291bnRIb2xkZXIoUGxhbiYgcGxhbikK
KyAgICAgICAgOiBtX3BsYW4ocGxhbikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcGxhbi5tX2xvY2spOworICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMr
KzsKKyAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBt
X3NvdXJjZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlb
ZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGgg
PD0gbV9zb3VyY2VMZW5ndGgpOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0
dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0U3R1YnMu
c2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Ci0g
ICAgICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihtX3ZtLCBmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVT
aWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOwotCi0gICAgICAgICAg
ICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0
aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlv
biwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyk7Ci0K
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewotICAg
ICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE11bHRp
cGxlIGNvbXBpbGVzIGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNo
b29zZSB0aGUgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFr
ZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQg
aW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpOyAvLyBGSVhNRSBtYWtlIHRo
aXMgYW4gRXhwZWN0ZWQuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEluZGV4ID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgIH5UaHJl
YWRDb3VudEhvbGRlcigpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BsYW4u
bV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CiAKLSAg
ICAgICAgICAgICAgICAvLyBXZSB3aWxsIHRlcm1pbmF0ZSBvbiB0aGUgbmV4dCBleGVjdXRpb24u
Ci0gICAgICAgICAgICAgICAgY29udGludWU7IAotICAgICAgICAgICAgfQorICAgICAgICBpZiAo
IW1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcykKKyAgICAgICAgICAgIG1fcGxhbi5jb21w
bGV0ZShsb2NrZXIpOworICAgIH0KIAotICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotICAg
ICAgICB9Ci0gICAgfTsKKyAgICBQbGFuJiBtX3BsYW47Cit9OwogCi0gICAgTW9ub3RvbmljVGlt
ZSBzdGFydFRpbWU7Ci0gICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRp
bWVzKCkpCi0gICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwordm9pZCBQ
bGFuOjpjb21waWxlRnVuY3Rpb25zKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6
UHJlcGFyZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlv
biIpOwogCi0gICAgdWludDMyX3QgdGhyZWFkQ291bnQgPSBPcHRpb25zOjp1c2VDb25jdXJyZW50
SklUKCkgPyBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA6IDE7Ci0gICAgdWludDMyX3Qg
bnVtV29ya2VyVGhyZWFkcyA9IHRocmVhZENvdW50IC0gMTsKLSAgICBWZWN0b3I8VGhyZWFkSWRl
bnRpZmllcj4gdGhyZWFkczsKLSAgICB0aHJlYWRzLnJlc2VydmVDYXBhY2l0eShudW1Xb3JrZXJU
aHJlYWRzKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtV29ya2VyVGhyZWFkczsg
aSsrKQotICAgICAgICB0aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVUaHJlYWQoImpzYy53
YXNtLWIzLWNvbXBpbGF0aW9uLnRocmVhZCIsIGRvV29yaykpOworICAgIGlmIChtX3N0YXRlID49
IFN0YXRlOjpDb21waWxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFRocmVhZENvdW50SG9sZGVy
IGhvbGRlcigqdGhpcyk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludDMyX3QgZnVu
Y3Rpb25JbmRleDsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBmdW5jdGlvbkluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgICAgICArK21fY3Vy
cmVudEluZGV4OworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKSkKKyAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0
ZTo6Q29tcGlsZWQpOworICAgICAgICB9CiAKLSAgICBkb1dvcmsoKTsgLy8gTGV0IHRoZSBtYWlu
IHRocmVhZCBkbyBzb21lIHdvcmsgdG9vLgorICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbklu
ZGV4XS5zdGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0
aCA8PSBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbZnVuY3Rpb25JbmRleF07CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAg
ICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpICsg
ZnVuY3Rpb25JbmRleDsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlRnVuY3Rpb24oJm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNU
b1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKSk7CisKKyAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigp
OworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZSht
X3ZtLCBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQs
IGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVu
Y3Rpb25JbmRleF0sICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGlj
ZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLCBtX21vZGUpOworCisgICAgICAgIGlmIChVTkxJ
S0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJH
ZXR0aW5nIHRoZSBsb2NrOiBmYWlsIik7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlKSB7CisgICAgICAg
ICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4g
V2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KKyAgICAgICAgICAgICAgICBmYWlsKGxv
Y2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVu
Y3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklY
TUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1Xb3JrZXJUaHJlYWRzOyBpKyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRo
cmVhZHNbaV0pOworICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7CisgICAgfQorfQogCi0gICAgZm9y
ICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250
ZXh0c1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3Jp
cHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIHNpZ25hdHVyZUluZGV4KS0+
dG9TdHJpbmcoKTsKK3ZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKQor
eworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRl
eCA+PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOworICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q29tcGlsZWQpIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0g
MDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVu
Y3Rpb25JbmRleCsrKSB7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCptX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7
Ci0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0t
Pndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICBDb21waWxhdGlv
bkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07
CisgICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbklu
ZGV4XTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIobV92bSwgKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAg
ICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2Fz
bUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQogICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vf
dW5pcXVlPEIzOjpDb21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFz
c2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0
aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0
LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNvbnRleHQuanNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRy
KG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29u
dGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVu
Y3Rpb25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogCi0gICAg
ICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9X
YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGls
YXRpb24gPQogICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5
IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24u
YXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAK
LSAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkgewotICAg
ICAgICBkYXRhTG9nTG4oIlRvb2sgIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1l
KS5taWNyb3NlY29uZHMoKSwKLSAgICAgICAgICAgICIgdXMgdG8gY29tcGlsZSBhbmQgbGluayB0
aGUgbW9kdWxlIik7Ci0gICAgfQorICAgICAgICB9CiAKLSAgICAvLyBQYXRjaCB0aGUgY2FsbCBz
aXRlcyBmb3IgZWFjaCBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBmb3IgKGF1dG8mIHVubGlu
a2VkIDogbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscykgewotICAgICAgICBmb3IgKGF1dG8mIGNh
bGwgOiB1bmxpbmtlZCkgewotICAgICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7Ci0g
ICAgICAgICAgICBpZiAobV9tb2R1bGVJbmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUUgaW1wb3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFk
IG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVw
bGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2Fs
bC50YXJnZXQgPT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCisgICAgICAg
IGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxpbmtlZCkgeworICAgICAgICAgICAgICAgIHZv
aWQqIGV4ZWN1dGFibGVBZGRyZXNzOworICAgICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9y
bWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVu
Y3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wb3J0cyBjb3Vs
ZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBv
aW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VS
VC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IGNhbGwudGFyZ2V0ID09IFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9KcwogICAgICAgICAgICAgICAgICAgICA/IG1fd2Fz
bUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXgpLndhc21Ub0pzLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpCiAgICAgICAgICAgICAgICAgICAgIDogbV93YXNtRXhpdFN0dWJzLmF0KGNh
bGwuZnVuY3Rpb25JbmRleCkud2FzbVRvV2FzbS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0
ICE9IFVubGlua2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7Ci0gICAgICAgICAgICAg
ICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1
bmN0aW9uSW5kZXggLSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpKS0+d2FzbUVudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldCAhPSBVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMpOworICAgICAgICAgICAgICAgICAgICBleGVj
dXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25J
bmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIG1fZmFpbGVkID0gZmFsc2U7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBs
ZXRlZCkgeworICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAg
bV9jb21wbGV0aW9uVGFzaygqdGhpcyk7CisgICAgICAgIG1fY29tcGxldGVkLm5vdGlmeUFsbCgp
OworICAgIH0KIH0KIAotdm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+IGNhbGxiYWNrKQordm9pZCBQbGFuOjp3
YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXgg
PCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4
KSB7Ci0gICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxl
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21F
bnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENhbGxlZSk7Ci0K
LSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0
aW9uLT53YXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2Fs
bGVlKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIGlmIChtX3N0YXRlICE9
IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEg
d2FpdCBjb25kaXRpb25hbGx5IHNvIHdlIGRvbid0IGhhdmUgdG8gaG9sZCB0aGUgbG9jayB0byBj
b21wbGV0ZSAvIGZhaWwuCisgICAgICAgIG1fY29tcGxldGVkLndhaXQobV9sb2NrKTsKKyAgICB9
Cit9CiAKLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBqc0VudHJ5cG9p
bnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKK3ZvaWQgUGxhbjo6Y2FuY2VsKCkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIGlmIChtX3N0YXRlICE9IFN0YXRl
OjpDb21wbGV0ZWQpIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCk7CisgICAgICAgIGZhaWwobG9ja2VyLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5IFBsYW4gd2FzIGNhbmNlbGVkLiBJZiB5b3Ugc2VlIHRoaXMgZXJyb3IgbWVzc2Fn
ZSBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmchIikpOwogICAgIH0KIH0KIAor
CiBQbGFuOjp+UGxhbigpIHsgfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggMzU0NGZkNDhkYzhkOTA5M2VmNmJhODE4
NGU0NWM0ZmUwMDc2NjJmNC4uN2FmZDY1MGM3ZmE5NWY2NTcyZmVkOWZkZDU4MDM3ZjkwNDFmZTZi
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYxICs0MCw5MyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxMaW5rSW5mbzsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKK2NsYXNzIEpTUHJvbWlzZURlZmVycmVkOwog
CiBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIFBsYW4geworY2xhc3MgUGxhbiA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgUGxhbihWTSosIFZlY3Rvcjx1aW50OF90Pik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxh
bihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHN0YXRpYyB2b2lkIGRvbnRGaW5h
bGl6ZShQbGFuJikgeyB9CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGxhbiYpPiBD
b21wbGV0aW9uVGFzazsKKyAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGls
ZSwgVmFsaWRhdGlvbiB9OworICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3Qg
aG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJl
ZmVyZW5jZSBjeWNsZS4KKyAgICBQbGFuKFZNJiwgQXJyYXlCdWZmZXImLCBBc3luY1dvcmssIENv
bXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8
dWludDhfdD4mLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dvcmssIENvbXBs
ZXRpb25UYXNrJiYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CiAKLSAgICBib29s
IHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiA9IHN0ZDo6
bnVsbG9wdCk7CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0gc3RkOjpu
dWxsb3B0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmUoKTsKKyAgICB2b2lk
IGNvbXBpbGVGdW5jdGlvbnMoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlh
bGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+KTsKLQotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7
Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpbml0aWFs
aXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJik7CiAKICAgICBWZWN0b3I8RXhwb3J0PiYgZXhwb3J0
cygpIGNvbnN0CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAgIHJl
dHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzOwogICAgIH0KIAogICAgIHNpemVfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNp
emUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwor
ICAgICAgICByZXR1cm4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOwogICAgIH0K
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5m
b3JtYXRpb24oKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX21vZHVsZUluZm9ybWF0aW9uKTsKICAgICB9CiAKICAgICBCYWc8Q2Fs
bExpbmtJbmZvPiYmIHRha2VDYWxsTGlua0luZm9zKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAh
aGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV9jYWxsTGlua0luZm9zKTsKICAg
ICB9CiAKICAgICBWZWN0b3I8V2FzbUV4aXRTdHVicz4mJiB0YWtlV2FzbUV4aXRTdHVicygpCiAg
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAgIHJldHVybiBXVEZNb3Zl
KG1fd2FzbUV4aXRTdHVicyk7CiAgICAgfQogCi0gICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUoKTsgfQorICAgIE1lbW9y
eU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIHZvaWQgc2V0TW9kZShN
ZW1vcnlNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0UGVuZGluZ1By
b21pc2UoSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UpIHsgbV9wZW5kaW5nUHJvbWlzZSA9IHBy
b21pc2U7IH0KKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcGVuZGluZ1Byb21pc2UoKSB7IHJldHVy
biBtX3BlbmRpbmdQcm9taXNlOyB9CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsg
fQorCisgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBJbml0aWFsLAor
ICAgICAgICBWYWxpZGF0ZWQsCisgICAgICAgIFByZXBhcmVkLAorICAgICAgICBDb21waWxlZCwK
KyAgICAgICAgQ29tcGxldGVkIC8vIFdlIHNob3VsZCBvbmx5IG1vdmUgdG8gQ29tcGxldGVkIGlm
IHdlIGFyZSBob2xkaW5nIHRoZSBsb2NrLgorICAgIH07CisKKyAgICBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CisKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JNZXNzYWdl
KCkuaXNOdWxsKCk7IH0KKyAgICBib29sIGhhc1dvcmsoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
IDwgU3RhdGU6OkNvbXBpbGVkOyB9CisgICAgYm9vbCBoYXNCZWVuUHJlcGFyZWQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZDsgfQorCisgICAgdm9pZCB3YWl0Rm9y
Q29tcGxldGlvbigpOworICAgIHZvaWQgY2FuY2VsKCk7CiAKIHByaXZhdGU6CisgICAgY2xhc3Mg
VGhyZWFkQ291bnRIb2xkZXI7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOwor
CisgICAgdm9pZCBjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpOworCisgICAgdm9pZCBt
b3ZlVG9TdGF0ZShTdGF0ZSk7CisgICAgdm9pZCBmYWlsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
U3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsKKworICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0
YXRlKTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJ
bmZvcm1hdGlvbjsKICAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeTsKICAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IG1fbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXM7CkBAIC0xMDMsMTYgKzEz
NSwyNCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFs
RnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRp
b25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAKLSAgICBWTSogbV92bTsKKyAgICBW
TSYgbV92bTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogbV9wZW5kaW5nUHJvbWlzZSB7IG51bGxw
dHIgfTsKKyAgICBDb21wbGV0aW9uVGFzayBtX2NvbXBsZXRpb25UYXNrOworCiAgICAgVmVjdG9y
PFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
czsKICAgICBjb25zdCB1aW50OF90KiBtX3NvdXJjZTsKICAgICBjb25zdCBzaXplX3QgbV9zb3Vy
Y2VMZW5ndGg7Ci0gICAgYm9vbCBtX2ZhaWxlZCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7Ci0gICAgdWludDMyX3QgbV9jdXJyZW50SW5kZXg7CisgICAgTWVtb3J5TW9kZSBt
X21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIExvY2sgbV9sb2NrOwor
ICAgIENvbmRpdGlvbiBtX2NvbXBsZXRlZDsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Oklu
aXRpYWwgfTsKKyAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CisgICAgdWludDhfdCBt
X251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRl
eCB7IDAgfTsKIH07CiAKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW5JbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDgyMGMxMjI5NzQyMGExZGM2MzJlYTkyMzU2MmMzNjBj
ZGNjZjRhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuSW5saW5lcy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNt
UGxhbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5j
dG9yJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIWZhaWxlZCgpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsK
KyAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKKworICAgICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpj
cmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxs
ZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENhbGxlZSk7CisKKyAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpj
cmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92ZUxv
Y2F0aW9uLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisKKyAgICAgICAgY2FsbGJhY2soaW50ZXJu
YWxGdW5jdGlvbkluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVl
KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlk
YXRlLmNwcAppbmRleCA3NWQzODI2Y2FkMjFiMzg5NmU0MWVlYmRjMzc0ZmNhZTY1NDYxMjE0Li45
MjM4NTk0YmE5N2Y1M2Y5MmFhNWRjMjA4NDk1NTZhZGI4NGZhZjg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCBhdXRv
IFZhbGlkYXRlOjpjaGVja0JyYW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgZXhwcgogICAgICAgICBpZiAodGFyZ2V0LnNpZ25hdHVyZSgpID09IFZv
aWQpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImJyYW5jaCB0byBibG9jayBvbiBlbXB0
eSBleHByZXNzaW9uIHN0YWNrIik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZXhw
cmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgdGFyZ2V0LnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExl
dmVsID8gImJyYW5jaCBvdXQgb2YgZnVuY3Rpb24iIDogImJyYW5jaCB0byBibG9jayIsICIgb24g
ZW1wdHkgZXhwcmVzc2lvbiBzdGFjaywgYnV0IGV4cGVjdGVkICIsIHRhcmdldC5zaWduYXR1cmUo
KSk7CiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFyZ2V0LnNpZ25hdHVyZSgpICE9
IGV4cHJlc3Npb25TdGFjay5sYXN0KCksICJicmFuY2gncyBzdGFjayB0eXBlIGRvZXNuJ3QgbWF0
Y2ggYmxvY2sncyB0eXBlIik7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2M2NkYmJmOWMyZWI0
NGM0NTI4Y2EzN2IxZDc1ZTMzYmZiODg2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0wLDAgKzEsMjU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIldhc21QbGFuLmgiCisKKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK2NvbnN0IGNoYXIqIFdvcmtsaXN0Ojpwcmlvcml0eVN0cmlu
ZyhQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CisgICAgY2Fz
ZSBQcmlvcml0eTo6UHJlcGFyYXRpb246IHJldHVybiAiUHJlcGFyYXRpb24iOworICAgIGNhc2Ug
UHJpb3JpdHk6OlNodXRkb3duOiByZXR1cm4gIlNodXRkb3duIjsKKyAgICBjYXNlIFByaW9yaXR5
OjpDb21waWxhdGlvbjogcmV0dXJuICJDb21waWxhdGlvbiI7CisgICAgY2FzZSBQcmlvcml0eTo6
U3luY2hyb25vdXM6IHJldHVybiAiU3luY2hyb25vdXMiOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitjbGFzcyBXb3JrbGlzdDo6VGhyZWFkIGZpbmFsIDog
cHVibGljIEF1dG9tYXRpY1RocmVhZCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBBdXRvbWF0aWNU
aHJlYWQgQmFzZTsKKyAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgV29y
a2xpc3QmIHdvcmspCisgICAgICAgIDogQmFzZShsb2NrZXIsIHdvcmsubV9sb2NrLCB3b3JrLm1f
cGxhbkVucXVldWVkKQorICAgICAgICAsIHdvcmtsaXN0KHdvcmspCisgICAgeworCisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4oY29u
c3QgQWJzdHJhY3RMb2NrZXImKQorICAgIHsKKyAgICAgICAgYXV0byYgcXVldWUgPSB3b3JrbGlz
dC5tX3F1ZXVlOworCisgICAgICAgIGlmIChxdWV1ZS5lbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChxdWV1ZS50b3AoKS5wbGFuID09IGVsZW1lbnQucGxhbikKKyAg
ICAgICAgICAgIHF1ZXVlLnBvcCgpOworICAgIH0KKworICAgIFBvbGxSZXN1bHQgcG9sbChjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYg
cXVldWUgPSB3b3JrbGlzdC5tX3F1ZXVlOworICAgICAgICBzeW5jaHJvbml6ZS5ub3RpZnlBbGwo
KTsKKworICAgICAgICB3aGlsZSAoIXF1ZXVlLmVtcHR5KCkpIHsKKworICAgICAgICAgICAgUHJp
b3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS50b3AoKS5wcmlvcml0eTsKKyAgICAgICAgICAgIGlmIChw
cmlvcml0eSA9PSBXb3JrbGlzdDo6UHJpb3JpdHk6OlNodXRkb3duKQorICAgICAgICAgICAgICAg
IHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOworCisgICAgICAgICAgICBlbGVtZW50ID0gcXVldWUu
dG9wKCk7CisgICAgICAgICAgICAvLyBPbmx5IG9uZSB0aHJlYWQgc2hvdWxkIHZhbGlkYXRlL3By
ZXBhcmUuCisgICAgICAgICAgICBpZiAoIXF1ZXVlLnRvcCgpLnBsYW4tPmhhc0JlZW5QcmVwYXJl
ZCgpKQorICAgICAgICAgICAgICAgIHF1ZXVlLnBvcCgpOworCisgICAgICAgICAgICBpZiAoZWxl
bWVudC5wbGFuLT5oYXNXb3JrKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6
Oldvcms7CisKKyAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYSBhbm90aGVyIHRocmVhZCBs
aW5raW5nIHRoaXMgcGxhbiBzbyB3ZSBjYW4gZGVxdWUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3Ro
ZXIgcGxhbnMuCisgICAgICAgICAgICBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4obG9j
a2VyKTsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKKyAgICB9CisKKyAgICBXb3JrUmVzdWx0
IHdvcmsoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBjb21wbGV0ZSA9IFsmXSAoKSB7
CisgICAgICAgICAgICBlbGVtZW50ID0gUXVldWVFbGVtZW50KCk7CisgICAgICAgICAgICByZXR1
cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiogcGxh
biA9IGVsZW1lbnQucGxhbi5nZXQoKTsKKyAgICAgICAgQVNTRVJUKHBsYW4pOworICAgICAgICBp
ZiAoIXBsYW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CisgICAgICAgICAgICBwbGFuLT5wYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKCk7CisgICAgICAgICAgICBpZiAoIXBsYW4tPmhhc1dvcmsoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcGxhbi0+cHJlcGFyZSgpOworCisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqd29y
a2xpc3QubV9sb2NrKTsKKyAgICAgICAgICAgIGVsZW1lbnQubmV4dFByaW9yaXR5KCk7CisgICAg
ICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICB3b3Jr
bGlzdC5tX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgY2hlY2sgaW4gYXQgc29tZSBvY2Nhc2lvbmFsbHkg
dG8gc2VlIGlmIHRoZXJlIGFyZSBuZXcsIGhpZ2hlciBwcmlvcml0eSBlLmcuIHN5bmNocm9ub3Vz
LCBwbGFucyB0aGF0IG5lZWQgdG8gYmUgcnVuLgorICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rp
b25zKCk7CisgICAgICAgIEFTU0VSVCghcGxhbi0+aGFzV29yaygpKTsKKyAgICAgICAgYXR0ZW1w
dFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFuKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xvY2spKTsKKyAg
ICAgICAgcmV0dXJuIGNvbXBsZXRlKCk7CisgICAgfQorCitwdWJsaWM6CisgICAgQ29uZGl0aW9u
IHN5bmNocm9uaXplOworICAgIFdvcmtsaXN0JiB3b3JrbGlzdDsKKyAgICAvLyBXZSBjYW4gb25s
eSBtb2RpZnkgZWxlbWVudCB3aGVuIGhvbGRpbmcgdGhlIGxvY2suIEEgc3luY2hyb25vdXMgY29t
cGlsZSBtaWdodCBsb29rIGF0IGVhY2ggdGhyZWFkJ3MgdGFza3MgaW4gb3JkZXIgdG8gYm9vc3Qg
dGhlIHByaW9yaXR5LgorICAgIFF1ZXVlRWxlbWVudCBlbGVtZW50OworfTsKKwordm9pZCBXb3Jr
bGlzdDo6UXVldWVFbGVtZW50OjpuZXh0UHJpb3JpdHkoKQoreworICAgIHN3aXRjaCAocHJpb3Jp
dHkpIHsKKyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlvbjoKKyAgICAgICAgcHJpb3JpdHkg
PSBQcmlvcml0eTo6Q29tcGlsYXRpb247CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByaW9y
aXR5OjpTeW5jaHJvbm91czoKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIFdvcmtsaXN0OjplbnF1ZXVlKFJlZlB0cjxQbGFuPiBwbGFuKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCptX2xvY2spOworCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHByb21pc2Ug
aXQgbXVzdCBiZSBzeW5jaHJvbm91cyBzbyB3ZSBzaG91bGQgYm9vc3QgdGhlIHByaW9yaXR5Lgor
ICAgIFByaW9yaXR5IHByaW9yaXR5ID0gcGxhbi0+cGVuZGluZ1Byb21pc2UoKSA/IFByaW9yaXR5
OjpQcmVwYXJhdGlvbiA6IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiRW5xdWV1aW5nIHBsYW4gd2l0aCBwcmlvcml0eTogIiwgcHJpb3JpdHlTdHJpbmco
cHJpb3JpdHkpKTsKKyAgICBtX3F1ZXVlLnB1c2goeyBwcmlvcml0eSwgbmV4dFRpY2tldCgpLCAg
V1RGTW92ZShwbGFuKSB9KTsKKyAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7
Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxh
bikKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAg
ICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4gaXRlcmF0b3Igb3IgZGVj
cmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMgZnVuY3Rpb24KKyAgICAg
ICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUgc2hvdWxk
IGJlIHNtYWxsLgorICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgb3VyIG93biBQcmlv
cml0eVF1ZXVlIHRoYXQgZG9lc24ndCBzdWNrLgorICAgICAgICBzdGQ6OnZlY3Rvcjxjb25zdCBR
dWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOworICAgICAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkg
eworICAgICAgICAgICAgaWYgKG1fcXVldWUudG9wKCkucGxhbiA9PSAmcGxhbikgeworICAgICAg
ICAgICAgICAgIFF1ZXVlRWxlbWVudCB0YXJnZXQgPSBtX3F1ZXVlLnRvcCgpOworICAgICAgICAg
ICAgICAgIG1fcXVldWUucG9wKCk7CisKKyAgICAgICAgICAgICAgICB0YXJnZXQucHJpb3JpdHkg
PSBQcmlvcml0eTo6U3luY2hyb25vdXM7CisgICAgICAgICAgICAgICAgbV9xdWV1ZS5wdXNoKHRh
cmdldCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbGVtZW50cy5wdXNoX2JhY2sobV9xdWV1ZS50b3AoKSk7CisgICAgICAgICAgICBtX3F1ZXVl
LnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50
cykKKyAgICAgICAgICAgIG1fcXVldWUucHVzaChlbGVtZW50KTsKKworICAgICAgICBmb3IgKGF1
dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgeworICAgICAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVu
dC5wbGFuID09ICZwbGFuKQorICAgICAgICAgICAgICAgIHRocmVhZC0+ZWxlbWVudC5wcmlvcml0
eSA9IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICAgICAgfQorICAgIH0KKworICAgIHBsYW4u
d2FpdEZvckNvbXBsZXRpb24oKTsKK30KKwordm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9y
Vk0oVk0mIHZtKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIC8vIHN0
ZDo6cHJpb3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBhbiBpdGVyYXRvci4uLiA6KCBXaGlsZSB0
aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0aW9uCisgICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCB2
ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUgc2hvdWxkIGJlIHNtYWxsLgorICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9yaXR5UXVldWUgdGhhdCBkb2Vzbid0IHN1Y2suCisg
ICAgc3RkOjp2ZWN0b3I8Y29uc3QgUXVldWVFbGVtZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAo
IW1fcXVldWUuZW1wdHkoKSkgeworICAgICAgICBpZiAoJm1fcXVldWUudG9wKCkucGxhbi0+dm0o
KSA9PSAmdm0pIHsKKyAgICAgICAgICAgIG1fcXVldWUudG9wKCkucGxhbi0+Y2FuY2VsKCk7Cisg
ICAgICAgICAgICBtX3F1ZXVlLnBvcCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKG1fcXVldWUudG9wKCkpOworICAgICAgICBt
X3F1ZXVlLnBvcCgpOworICAgIH0KKworICAgIGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMp
CisgICAgICAgIG1fcXVldWUucHVzaChlbGVtZW50KTsKKworICAgIGZvciAoYXV0byYgdGhyZWFk
IDogbV90aHJlYWRzKSB7CisgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbiAmJiAmdGhy
ZWFkLT5lbGVtZW50LnBsYW4tPnZtKCkgPT0gJnZtKSB7CisgICAgICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNh
bid0IGJsb2NrIHdpdGhvdXQgY2xlYXJpbmcgdGhlIHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9j
ayB0byBkbyBzby4KKyAgICAgICAgICAgIHRocmVhZC0+ZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsK
KyAgICAgICAgICAgIHRocmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworV29ya2xpc3Q6OldvcmtsaXN0KCkKKyAgICA6IG1fbG9jayhCb3g8TG9j
az46OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOjpjcmVhdGUoKSkKK3sKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFk
cyA9IE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSA/IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JD
b3JlcygpIDogMTsKKyAgICBtX3RocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ29tcGls
YXRpb25UaHJlYWRzKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7IGkrKykKKyAg
ICAgICAgbV90aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFdvcmtsaXN0
OjpUaHJlYWQ+KGxvY2tlciwgKnRoaXMpKTsKK30KKworV29ya2xpc3Q6On5Xb3JrbGlzdCgpCit7
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgbV9x
dWV1ZS5wdXNoKHsgUHJpb3JpdHk6OlNodXRkb3duLCBuZXh0VGlja2V0KCksIG51bGxwdHIgfSk7
CisgICAgICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGhyZWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV90aHJlYWRzW2ldLT5qb2luKCk7Cit9CisKK3N0YXRpYyBXb3JrbGlzdCogZ2xvYmFsV29ya2xp
c3Q7CisKK1dvcmtsaXN0KiBleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCkgeyByZXR1cm4gZ2xvYmFs
V29ya2xpc3Q7IH0KK1dvcmtsaXN0JiBlbnN1cmVXb3JrbGlzdCgpCit7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIGluaXRpYWxpemVXb3JrbGlzdDsKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0
aWFsaXplV29ya2xpc3QsIFtdIHsKKyAgICAgICAgZ2xvYmFsV29ya2xpc3QgPSBuZXcgV29ya2xp
c3QoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKmdsb2JhbFdvcmtsaXN0OworfQorCisKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWIz
OTI2ZDJhODU2YmY4ZTNhNGYwZWJhNTcyYWUwYmFlOGYzNDc1NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0wLDAgKzEsMTA3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJWTS5oIgorCisj
aW5jbHVkZSA8cXVldWU+CisKKyNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNQcm9taXNl
RGVmZXJyZWQ7CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgUGxhbjsKKworY2xhc3MgV29y
a2xpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdvcmts
aXN0KCk7CisgICAgfldvcmtsaXN0KCk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVu
cXVldWUoUmVmUHRyPFBsYW4+KTsKKyAgICB2b2lkIHN0b3BBbGxQbGFuc0ZvclZNKFZNJik7CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxh
biYpOworCisgICAgdm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7
CisgICAgdm9pZCBkZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7CisKK3By
aXZhdGU6CisgICAgY2xhc3MgVGhyZWFkOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7CisKKyAg
ICB0eXBlZGVmIHVuc2lnbmVkIFRpY2tldDsKKyAgICBUaWNrZXQgbmV4dFRpY2tldCgpIHsgcmV0
dXJuIG1fbGFzdEdyYW50ZWRUaWNrZXQrKzsgfQorCisgICAgZW51bSBjbGFzcyBQcmlvcml0eSB7
CisgICAgICAgIFNodXRkb3duLAorICAgICAgICBTeW5jaHJvbm91cywKKyAgICAgICAgQ29tcGls
YXRpb24sCisgICAgICAgIFByZXBhcmF0aW9uCisgICAgfTsKKyAgICBjb25zdCBjaGFyKiBwcmlv
cml0eVN0cmluZyhQcmlvcml0eSk7CisKKyAgICBzdHJ1Y3QgUXVldWVFbGVtZW50IHsKKyAgICAg
ICAgUHJpb3JpdHkgcHJpb3JpdHk7CisgICAgICAgIFRpY2tldCB0aWNrZXQ7CisgICAgICAgIFJl
ZlB0cjxQbGFuPiBwbGFuOworCisgICAgICAgIHZvaWQgbmV4dFByaW9yaXR5KCk7CisgICAgfTsK
KworICAgIHN0cnVjdCBDb21wYXJhdG9yIHsKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IFF1ZXVlRWxlbWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50JiByaWdodCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGxlZnQucHJpb3JpdHkgPT0gcmlnaHQucHJpb3JpdHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0OworICAg
ICAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBCb3g8TG9jaz4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNU
aHJlYWRDb25kaXRpb24+IG1fcGxhbkVucXVldWVkOworICAgIC8vIFRlY2huaWNhbGx5LCB0aGlz
IGNvdWxkIG92ZXJmbG93IGJ1dCB0aGF0J3MgdW5saWtlbHkuIEV2ZW4gaWYgaXQgZGlkLCB3ZSB3
aWxsIGp1c3QgY29tcGlsZSB0aGluZ3Mgb2YgdGhlIHNhbWUKKyAgICAvLyBQcmlvcml0eSBpdCB0
aGUgd3Jvbmcgb3JkZXIsIHdoaWNoIGlzbid0IHdyb25nLCBqdXN0IHN1Ym9wdGltYWwuCisgICAg
VGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBXVEY6OlZlY3RvciBidXQgV1RGOjpWZWN0b3IgZG9lcyBub3Qgc3VwcG9ydCByYW5k
b20gYWNjZXNzIGl0ZXJhdG9yLgorICAgIHN0ZDo6cHJpb3JpdHlfcXVldWU8UXVldWVFbGVtZW50
LCBzdGQ6OnZlY3RvcjxRdWV1ZUVsZW1lbnQ+LCBDb21wYXJhdG9yPiBtX3F1ZXVlOworICAgIEhh
c2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKj4gbV9hY3RpdmVQbGFuczsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFRocmVhZD4+IG1fdGhyZWFkczsKK307CisKK1dvcmtsaXN0KiBl
eGlzdGluZ1dvcmtsaXN0T3JOdWxsKCk7CitKU19FWFBPUlRfUFJJVkFURSBXb3JrbGlzdCYgZW5z
dXJlV29ya2xpc3QoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAppbmRleCBiODc3N2RhMGQ0ZDdhMTMwZjQyMjRlZDQ1
ZmNjYzJkMTljMWYyN2M2Li5hOGEzZGNhM2QwOWY1ZGQzOWRhNmI5YThmOTk1ZGM4NTA4OTg3YWM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNhbGxlZS5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVl
U2F2ZVJlZ2lzdGVyczsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlw
b2ludCYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7
CiAKICAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CmluZGV4IGZmODcxMTY4MTlhMzIyNDM5ZTgxY2JkMDQ2NDcyYTI2ZjIxODNkOGIuLmViOTYwNzNi
Njk5OGIwMmEyMDc0YWIxNWRmNzc0Njc2MmQ2ZmI1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0y
OSwzMSArMjksNjcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgi
CisjaW5jbHVkZSAiV2FzbVBsYW5JbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHlDb2RlQmxvY2siLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5r
SW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNt
RXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQor
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCBSZWY8V2Fz
bTo6UGxhbj4mJiBwbGFuLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICA6IEJhc2Uodm0sIHZt
LndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9jYWxsTGlua0lu
Zm9zKFdURk1vdmUoY2FsbExpbmtJbmZvcykpCi0gICAgLCBtX3dhc21FeGl0U3R1YnMoV1RGTW92
ZSh3YXNtRXhpdFN0dWJzKSkKKyAgICAsIG1fcGxhbihXVEZNb3ZlKHBsYW4pKQogICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgLCBtX2NhbGxlZUNvdW50KGNhbGxlZUNvdW50KQogewogICAgIG1fbW9k
dWxlLnNldCh2bSwgdGhpcywgb3duZXIpOworICAgIEFTU0VSVCghbW9kdWxlKCktPmNvZGVCbG9j
ayhtb2RlKSk7CisgICAgbW9kdWxlKCktPm1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KG1vZGUpXS5zZXQodm0sIHRoaXMsIHRoaXMpOworCiAgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwg
bV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4p
ICogMik7CiB9CiAKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5pdGlhbGl6ZSgpCit7
CisgICAgaWYgKGluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZNJiB2bSA9
IHBsYW4oKS52bSgpOworICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9j
aygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcGxhbigpLmhhc1dvcmsoKSk7CisKKyAgICBpZiAo
cGxhbigpLmZhaWxlZCgpKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGxhbigpLmVycm9y
TWVzc2FnZSgpOworICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQocGxhbigpLm1vZGUoKSA9PSBtb2RlKCkpOworICAg
IEFTU0VSVChwbGFuKCkuaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgPT0gbV9jYWxsZWVDb3VudCk7
CisKKyAgICBtX2NhbGxMaW5rSW5mb3MgPSBwbGFuKCkudGFrZUNhbGxMaW5rSW5mb3MoKTsKKyAg
ICBtX3dhc21FeGl0U3R1YnMgPSBwbGFuKCkudGFrZVdhc21FeGl0U3R1YnMoKTsKKworICAgIHBs
YW4oKS5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdh
c21FbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgIHNldEpTRW50cnlwb2ludENhbGxlZSh2bSwg
Y2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIHNldFdhc21FbnRyeXBv
aW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgIH0p
OworCisgICAgbV9wbGFuID0gbnVsbHB0cjsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6On5KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZl
VG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQorYm9vbCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIGNvbnN0CiB7
CisgICAgaWYgKCFydW5uYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBXYXNt
OjpNZW1vcnlNb2RlIGNvZGVNb2RlID0gbW9kZSgpOwogICAgIFdhc206Ok1lbW9yeU1vZGUgbWVt
b3J5TW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOwogICAgIHN3aXRjaCAoY29kZU1vZGUp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SGVscGVycy5oCmluZGV4IGYwMzMxMGVhNWUyMDYwNjU0MWQ1OGU3MjY0YjE4NWU0M2Q2OTMzZDQu
LjU3OGE2OWY0OTgxNWE4MjUyM2MxMTI5NDhmYmQ4ZWEwOTAzNWYyMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAt
NzMsNiArNzMsMjIgQEAgQUxXQVlTX0lOTElORSB1aW50OF90KiBnZXRXYXNtQnVmZmVyRnJvbVZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgc2kKICAgICByZXR1cm4gYXJyYXlC
dWZmZXJWaWV3ID8gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+dmVjdG9y
KCkpIDogc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKSk7
CiB9CiAKK0FMV0FZU19JTkxJTkUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVTb3VyY2VCdWZm
ZXJGcm9tVmFsdWUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgc2l6ZV90
IGJ5dGVPZmZzZXQ7CisgICAgc2l6ZV90IGJ5dGVTaXplOworICAgIHVpbnQ4X3QqIGRhdGEgPSBn
ZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIGF1
dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhICsgYnl0ZU9mZnNldCwgYnl0
ZVNpemUpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIHJldHVybiBidWZmZXI7CisKKyAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQUxXQVlTX0lOTElORSBib29sIGlzV2Vi
QXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiomIHdh
c21XcmFwcGVyRnVuY3Rpb24pCiB7CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHModm0sIFdlYkFz
c2VtYmx5RnVuY3Rpb246OmluZm8oKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDFjMTFiMGNhNjVj
OTE3NDJmOGU0ODEzYzI0ZDk3NWY2NWVlYmFhMTguLjkxZGEzOWUyNTdlMTQzMTNiMzUzNGY2M2Vm
ZGE1NjUyMjk4MDQ1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMzIsMzEgKzMyLDE2IEBACiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4gZm9yIG1vZHVsZXMgdGhh
dCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2FudCB0byBhdm9pZCByZWNv
bXBsaW5nIHRoZXJlLgotICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7Ci0gICAgICAgIGF1dG8g
Y29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxvY2sodm0sIGV4ZWMsIG1l
bW9yeSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsKTsKLSAgICAgICAgbV9j
b2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIH0KLSAgICBtX21lbW9yeS5z
ZXQodm0sIHRoaXMsIG1lbW9yeSk7Ci19Ci0KLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxl
TmFtZXNwYWNlT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJl
IHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KLSAgICBhdXRvKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpKSkgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5j
dGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIG1vZHVsZSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKLSAgICByZXR1cm4gaW5zdGFu
Y2U7Ci19Citjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CkBAIC03NSwxMSArNjAsMTEgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlLAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCisgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBt
b2R1bGUpOwogICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIG1f
Z2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwog
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsK
IAotICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jb2RlQmxvY2soKSk7CiAg
ICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VP
YmplY3QpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJl
eHBvcnRzIiksIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9CkBAIC05NSwxNiArODAs
Mjc3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2spOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
dGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1
bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqdGhpc09iamVjdC0+aW1wb3J0
RnVuY3Rpb24oaSkpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRG
dW5jdGlvbnMoKVtpXSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjphZGRVbml0
aWFsaXplZENvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpQbGFuPiBwbGFuKQoreworICAgIGF1
dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgbW9kdWxl
KCksIG1lbW9yeU1vZGUoKSwgV1RGTW92ZShwbGFuKSwgbW9kdWxlKCktPm1vZHVsZUluZm9ybWF0
aW9uKCkuaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpOworICAgIG1fY29kZUJsb2NrLnNldCh2bSwg
dGhpcywgY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aW5pdGlhbGl6ZWQoKSk7
Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZSgpOworCisgICAgaWYgKCFjb2Rl
QmxvY2soKS0+cnVubmFibGUoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrKCktPmVycm9yTWVz
c2FnZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoY29k
ZUJsb2NrKCktPmlzU2FmZVRvUnVuKG1lbW9yeSgpKSk7CisKKyAgICBhdXRvKiBtb2R1bGVSZWNv
cmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVsZU5hbWVzcGFjZU9i
amVjdC0+bW9kdWxlUmVjb3JkKCkpOworICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBtb2R1
bGUoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKKworICAgIEpT
VmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGFydFJlc3VsdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
KTsKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNy
ZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1
bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUp
Cit7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAg
Y29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisKKyAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNP
YmplY3QqIGVycm9yKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfTsKKworICAgIC8vIElmIHRo
ZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmpl
Y3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KKyAgICBpZiAobW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKKyAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBt
YWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmpl
Y3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIpKSk7CisKKyAg
ICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUo
UHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKKyAgICBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFt
ZXNwYWNlKGV4ZWMpOworICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0
eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KKyAgICBhdXRvKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0u
aGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3Vu
dCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVs
ZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSk7CisgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNwYWNlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgLy8gTGV0IGZ1bmNzLCBtZW1v
cmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZh
U2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJs
eS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCisgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4g
aW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgorICAgIHVuc2lnbmVkIG51
bUltcG9ydEZ1bmN0aW9ucyA9IDA7CisgICAgdW5zaWduZWQgbnVtSW1wb3J0R2xvYmFscyA9IDA7
CisKKyAgICBib29sIGhhc01lbW9yeUltcG9ydCA9IGZhbHNlOworICAgIGJvb2wgaGFzVGFibGVJ
bXBvcnQgPSBmYWxzZTsKKyAgICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0
czoKKyAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsK
KyAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5n
IEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25hbWUpLgorICAgICAgICBKU1ZhbHVlIGltcG9y
dE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIGltcG9ydC5tb2R1bGUpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2Jq
ZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5p
c09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOwor
CisgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBp
Lml0ZW1fbmFtZSkKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGltcG9ydE1vZHVsZVZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0
KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBpbXBvcnQuZmllbGQpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgICAgICBz
d2l0Y2ggKGltcG9ydC5raW5kKSB7CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpG
dW5jdGlvbjogeworICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoK
KyAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMgZmFsc2UsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNh
bGxhYmxlIikpKTsKKworICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpT
T2JqZWN0Kj4odmFsdWUpOworICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQg
RnVuY3Rpb24gRXhvdGljIE9iamVjdDoKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IHdhc21GdW5jdGlvbjsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3
YXNtV3JhcHBlckZ1bmN0aW9uOworICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVu
Y3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7
CisgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1h
dGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisg
ICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRl
eDsKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAg
ICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgp
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNp
Z25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KKyAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5jdGlv
bigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAgICAgICAg
IGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25h
dHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNp
Z25hdHVyZSIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpaWkuIE90aGVyd2lz
ZToKKyAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rpb24g
b2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFzc2Vt
Ymx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFuZCBy
ZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNzZW1ibHlW
YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMgcGFydCBvZiBQbGFuIGNvbXBpbGF0
aW9uLgorICAgICAgICAgICAgLy8gaXYuIEFwcGVuZCB2IHRvIGZ1bmNzLgorICAgICAgICAgICAg
Ly8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMg
Y2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3
aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCisKKyAgICAg
ICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Cisg
ICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25z
KytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIC8vIHYuIEFwcGVu
ZCBjbG9zdXJlIHRvIGltcG9ydHMuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQg
YnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkg
aXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAgICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOwor
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNX
ZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGkuIElmIHYgaXMg
bm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KKyAgICAgICAgICAgIGlmICghdGFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVy
YWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUi
KSkpOworCisgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZv
cm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKKyAgICAgICAgICAgIHVpbnQzMl90
IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKGFjdHVhbElu
aXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRh
YmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOwor
CisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVt
ID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAg
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUt
Pm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdt
YXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworICAgICAg
ICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+ICpleHBlY3RlZE1heGltdW0pCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBs
YXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KKyAgICAgICAg
ICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCisgICAgICAgICAgICBp
bnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5
OiB7CisgICAgICAgICAgICAvLyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBn
dWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5KTsKKyAgICAgICAgICAgIGhhc01lbW9yeUlt
cG9ydCA9IHRydWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSwgdmFsdWUpOworICAgICAgICAg
ICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBh
IFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAgIGlmICghbWVtb3J5KQorICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpOworCisgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQg
ZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKKyAg
ICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnko
KS5pbml0aWFsKCk7CisgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5p
dGlhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRl
ZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICBpZiAo
V2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4
aW11bSA9IG1lbW9yeS0+bWVtb3J5KCkubWF4aW11bSgpOworICAgICAgICAgICAgICAgIGlmICgh
YWN0dWFsTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBp
bXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRo
YXQgaXQgZG9lcyIpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4
cGVjdGVkTWF4aW11bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBp
bXBvcnRzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21h
eGltdW0nIikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2
IHRvIG1lbW9yaWVzLgorICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRv
IGltcG9ydHMuCisgICAgICAgICAgICBBU1NFUlQoIWluc3RhbmNlLT5tX21lbW9yeSk7CisgICAg
ICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwgbWVtb3J5KTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2lu
ZDo6R2xvYmFsOiB7CisgICAgICAgICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9ydDoK
KyAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93
IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJs
ZSk7CisgICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0IG9y
IFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisg
ICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4
XS50eXBlID09IFdhc206Okk2NCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0
ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwg
bXVzdCBiZSBhIG51bWJlciIpKSk7CisgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFz
c2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KKyAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRH
bG9iYWxzID09IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJ
bmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVt
SW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwo
bnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVy
KCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBp
ZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
LmlzSW1wb3J0KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIE1l
bW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJ
bXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEg
bWVtb3J5IGRlZmluaXRpb24uCisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1v
cnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgICAg
ICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoZXhlYykpOworCisgICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnku
c2V0KHZtLCBpbnN0YW5jZSwKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpj
cmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlT
dHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24g
JiYgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKSB7CisgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ugc2hv
dWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGhhc1RhYmxlSW1wb3J0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghIW1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0lt
cG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRh
YmxlIGRlZmluaXRpb24uCisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0g
SlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgIG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1h
dGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICAvLyBXZSBzaG91
bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUg
ZGVmaW5lZC4KKyAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2Us
IHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCisgICAgICAgICAgICBB
U1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHRhYmxl
KTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkg
eworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3
YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdo
ZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBpbnN0YW5jZS0+bV9t
ZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCks
IGFkb3B0UmVmKCoobmV3IFdhc206Ok1lbW9yeSgpKSkpKTsKKyAgICB9CisgICAgCisgICAgLy8g
R2xvYmFscworICAgIHsKKyAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gbW9kdWxl
SW5mb3JtYXRpb24uZmlyc3RJbnRlcm5hbEdsb2JhbCk7CisgICAgICAgIGZvciAoc2l6ZV90IGds
b2JhbEluZGV4ID0gbnVtSW1wb3J0R2xvYmFsczsgZ2xvYmFsSW5kZXggPCBtb2R1bGVJbmZvcm1h
dGlvbi5nbG9iYWxzLnNpemUoKTsgKytnbG9iYWxJbmRleCkgeworICAgICAgICAgICAgY29uc3Qg
YXV0byYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tnbG9iYWxJbmRleF07Cisg
ICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9i
YWw6OklzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMp
OworICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3Rh
bmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGds
b2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBBU1NFUlQoIWluc3RhbmNlLT5jb2RlQmxvY2soKSk7CisgICAgaW5zdGFu
Y2UtPm1fY29kZUJsb2NrLnNldE1heUJlTnVsbCh2bSwgaW5zdGFuY2UsIGpzTW9kdWxlLT5jb2Rl
QmxvY2soaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkpOworCisgICAgcmV0dXJuIGluc3RhbmNlOwog
fQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaAppbmRleCBlMjI4NDk2OTY3MjA1YTMxMzZjODgzYmJkZTMyNmFkYmM3MTExMzBkLi5lYzli
YzhlODE0MDcyYjdlZTI1ZTkyYjliNDllMTA4NDZhYmZkNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtMzgs
NTEgKzM4LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFz
cyBQbGFuOworfQorCisKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA6IHB1YmxpYyBKU0Rl
c3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9i
amVjdCBCYXNlOwogCi0KLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUo
Vk0mLCBTdHJ1Y3R1cmUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBF
eGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
U3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
bV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm1vZHVsZSgpOwotICAg
IH0KKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJl
dHVybiBjb2RlQmxvY2soKSAmJiBjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZWQoKTsgfQorICAgIHZv
aWQgYWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2soVk0mLCBSZWY8V2FzbTo6UGxhbj4pOworICAgIHZv
aWQgZmluYWxpemVDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSopOwogCi0gICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsKLSAgICB9CisgICAg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KIAotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9uKHVuc2ln
bmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0
RnVuY3Rpb25zKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRGdW5jdGlvbnMoKVtpZHhdOwotICAg
IH0KLQotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpCi0gICAg
ewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRJbXBvcnRGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiB2YWx1
ZSwgdW5zaWduZWQgaWR4KQotICAgIHsKLSAgICAgICAgaW1wb3J0RnVuY3Rpb24oaWR4KS0+c2V0
KHZtLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQorICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1
bnNpZ25lZCBpZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMp
OyByZXR1cm4gaW1wb3J0RnVuY3Rpb25zKClbaWR4XS5nZXQoKTsgfQogCiAgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICAvLyBD
YWxsaW5nIHRoaXMgbWlnaHQgdHJpZ2dlciBhIHJlY29tcGlsZS4KLSAgICB2b2lkIHNldE1lbW9y
eShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKyAgICB2b2lkIHNldE1l
bW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5
KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQogICAgIFdhc206Ok1lbW9yeU1v
ZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAog
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9
Ci0gICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsg
bV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQogCiAgICAgaW50MzJfdCBsb2FkSTMyR2xv
YmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQogICAg
IGludDY0X3QgbG9hZEk2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bHMuZ2V0KClbaV07IH0KQEAgLTkwLDExICs3Myw2IEBAIHB1YmxpYzoKICAgICBkb3VibGUgbG9h
ZEY2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91Ymxl
Pihsb2FkSTY0R2xvYmFsKGkpKTsgfQogICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkIGksIGlu
dDY0X3QgYml0cykgeyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9CiAKLSAgICBzdGF0aWMg
c2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PEpTQ2VsbD4pICogaWR4OwotICAgIH0KLQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
ZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBt
X21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQpAQCAtMTEzLDYgKzkxLDkg
QEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KiBpbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVy
PEpTT2JqZWN0Pio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1
bmN0aW9ucygpKTsgfQorCisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1f
bW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVC
bG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxl
TmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBt
X21lbW9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAKaW5kZXggZjQxNDY3ZjRmYWFlOWRhYTA4MTY3NGU3ZjIwNTc4ZDRj
NWViNmYzYy4uYTJjZDM0NjEyYTZiOWU0YjJjOWQyMTFlZmQ4NDA5YTA0NjgwNWQ3NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHAKQEAgLTQyLDM1ICs0MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1vZHVsZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJs
eU1vZHVsZSkgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVs
ZTo6YnVpbGRDb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFdhc206OlBsYW4mIHBs
YW4sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5TW9kZT4gbW9kZSkKK0pTV2ViQXNzZW1ibHlN
b2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNl
LCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogeworICAgIEFTU0VSVCghcGxhbi0+aGFzV29y
aygpKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8g
T24gZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KLSAg
ICBwbGFuLnJ1bihtb2RlKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihl
eGVjLCB2bSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpOworICAgIGlmIChwbGFuLT5mYWlsZWQoKSkg
eworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUNvbXBp
bGVFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgpLCBwbGFuLT5lcnJvck1lc3NhZ2UoKSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgaWYgKG1vZGUpCi0gICAgICAgIEFT
U0VSVCgqbW9kZSA9PSBwbGFuLm1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBjYWxsZWVDb3VudCA9
IHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7Ci0gICAgYXV0byogY29kZUJsb2NrID0gSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB0aGlzLCBwbGFuLnRha2VDYWxsTGlua0lu
Zm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMoKSwgcGxhbi5tb2RlKCksIGNhbGxlZUNvdW50
KTsKLQotICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCksCi0gICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0SlNFbnRyeXBvaW50
Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNt
RW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiBjb2RlQmxvY2s7Ci19
Ci0KLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQ4X3QqIHNvdXJj
ZSwgc2l6ZV90IGJ5dGVTaXplKQotewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1i
bHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWMsIHNvdXJjZSwgYnl0ZVNpemUpOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBh
dXRvKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9k
dWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBXVEZNb3Zl
KHNvdXJjZSkpOworICAgIG1vZHVsZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUocGxhbikp
OworICAgIHJldHVybiBtb2R1bGU7CiB9CiAKIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVs
ZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03OCw2MSArNjEsNDAgQEAgU3RydWN0dXJlKiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9
CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1
bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNv
dXJjZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fc291cmNlQnVmZmVyKHNv
dXJjZS5yZWxlYXNlTm9uTnVsbCgpKQogewogfQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKLXsKLSAgICBXYXNtOjpNZW1vcnlNb2RlIG1vZGUg
PSBtZW1vcnktPm1lbW9yeSgpLm1vZGUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3NbaV0tPmlzU2FmZVRvUnVuKG1lbW9yeSkpCi0gICAgICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2tzW2ldLmdldCgpOwotICAgIH0KLQotICAgIEFTU0VSVCgh
Y29kZUJsb2NrRm9yKG1vZGUpKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwg
d2UgbmVlZCB0byByZWNvbXBpbGUuLi4KLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5i
eXRlTGVuZ3RoKCkpOwotCi0gICAgYXV0byogY29kZUJsb2NrID0gYnVpbGRDb2RlQmxvY2sodm0s
IGV4ZWMsIHBsYW4sIG1vZGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotCi0gICAgQVNTRVJUKHBsYW4uZXhwb3J0cygpLnNpemUoKSA9PSBtX2V4cG9ydFN5bWJv
bFRhYmxlLT5zaXplKCkpOwotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgZXhwIDogcGxhbi5leHBvcnRzKCkpCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGV4cCwgbV9leHBvcnRTeW1ib2xUYWJsZS0+Y29udGFpbnMoZXhwLmZpZWxkLmltcGwoKSkpOwot
ICAgIH0KLQotICAgIEFTU0VSVChtb2RlID09IGNvZGVCbG9jay0+bW9kZSgpKTsKLSAgICBjb2Rl
QmxvY2tGb3IobW9kZSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIHJldHVybiBjb2Rl
QmxvY2s7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKQor
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxX
YXNtOjpQbGFuPiYmIHBsYW4pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc291cmNlLCBieXRl
U2l6ZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtb2R1
bGVJbmZvcm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOworICAgIGZvciAo
YXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHMpIHsKKyAgICAgICAgQVNTRVJU
KGV4cC5maWVsZC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7CisgICAgICAgIGV4cC5m
aWVsZCA9IEF0b21pY1N0cmluZyhleHAuZmllbGQpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGlt
cCA6IG1vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzKSB7CisgICAgICAgIEFTU0VSVChpbXAuZmll
bGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBpbXAuZmllbGQgPSBB
dG9taWNTdHJpbmcoaW1wLmZpZWxkKTsKKyAgICAgICAgQVNTRVJUKGltcC5tb2R1bGUuaXNTYWZl
VG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBpbXAubW9kdWxlID0gQXRvbWljU3Ry
aW5nKGltcC5tb2R1bGUpOworICAgIH0KIAotICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxkQ29k
ZUJsb2NrKHZtLCBleGVjLCBwbGFuKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCk7
CisgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pOwog
CiAgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyBy
ZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4K
ICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRl
KHZtKTsKLSAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKSB7CisgICAgZm9yIChh
dXRvJiBleHAgOiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7CiAgICAgICAgIGF1dG8g
b2Zmc2V0ID0gZXhwb3J0U3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoTm9Mb2NraW5n
TmVjZXNzYXJ5KTsKLSAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNl
c3NhcnksIGV4cC5maWVsZC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KG9mZnNl
dCkpKTsKKyAgICAgICAgQVNTRVJUKGV4cC5maWVsZC5pbXBsKCktPmlzQXRvbWljKCkpOworICAg
ICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgc3RhdGljX2Nh
c3Q8QXRvbWljU3RyaW5nSW1wbCo+KGV4cC5maWVsZC5pbXBsKCkpLCBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgfQogCi0gICAgbV9zb3VyY2VCdWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZSwgYnl0ZVNpemUpOwotICAgIG1fbW9kdWxlSW5mb3JtYXRp
b24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIG1fZXhwb3J0U3ltYm9sVGFi
bGUuc2V0KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7Ci0gICAgY29kZUJsb2NrRm9yKGNv
ZGVCbG9jay0+bW9kZSgpKS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMzg5ZTYz
YTMzNWMxYzExN2I2OTc2OTcxMGM2M2JkN2Y4MzRlODZlNC4uYTQxNzg4NGRkNTExOTNjYmQwYTZj
NjJjZDY2OTFkMzE4ZjRhZTBlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNDgsMzUgKzQ4LDMyIEBAIGNsYXNzIEpT
V2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8
QXJyYXlCdWZmZXI+JiYgc291cmNlLCBSZWZQdHI8V2FzbTo6UGxhbj4mJik7CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpOyB9Ci0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gdGFrZVJlc2VydmVkTWVtb3J5
KCkgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LnRha2VSZXNlcnZlZE1lbW9y
eSgpOyB9CiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsgfQogICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4U3BhY2UpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFj
ZSk7CiAgICAgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgbW9k
dWxlIHdhcyBvcmlnaW5hbGx5IGNvbXBpbGVkIGV4cGVjdGluZyB0byB1c2UuIFRoaXMgd29uJ3Qg
bmVlZCB0byByZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gY29kZUJsb2NrRm9yKG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2Rl
KCkpLmdldCgpOyB9Ci0gICAgLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY29kZSBibG9jayBm
b3IgdGhlIGdpdmVuIG1lbW9yeSwgcG9zc2libHkgdHJpZ2dlcmluZyBhIHJlY29tcGlsZS4KLSAg
ICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBKU1dl
YkFzc2VtYmx5TWVtb3J5Kik7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2Nr
KFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0
PHNpemVfdD4obW9kZSldLmdldCgpOyB9CisKKyAgICBBcnJheUJ1ZmZlciYgc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2VCdWZmZXIuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihXYXNtOjpNZW1v
cnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1v
ZGUpXTsgfQotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJsb2NrKFZNJiwg
RXhlY1N0YXRlKiwgV2FzbTo6UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5TW9kZT4g
bW9kZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IGJ5dGVTaXplKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwg
UmVmUHRyPEFycmF5QnVmZmVyPiYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVm
UHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CisgICAgUmVm
PEFycmF5QnVmZmVyPiBtX3NvdXJjZUJ1ZmZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3Qg
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgV3JpdGVC
YXJyaWVyPFN5bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3NbV2FzbTo6TnVtYmVyT2ZNZW1v
cnlNb2Rlc107CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYWMzMTgx
YjNmOWRjZWU0ZTEzM2IwODdmZjcxZjQ5MDE1ZTQ4OGQyZC4uYzcyMjBjYzRkZmMyYWE2ZDQ2Mjg2
NDA5OWMxYmMzNWE5NjQ5Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBA
IC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9k
dWxlLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJ
bnN0YW5jZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgi
CkBAIC00NSw4ICs0Nyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci0KIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmNvbnN0
cnVjdG9yVGFibGVXZWJBc3NlbWJseUluc3RhbmNlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvcikgfTsKIAogLyogU291cmNlIGZvciBXZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IubHV0LmgKQEAgLTU0LDI2OSArNTQsNTIgQEAgY29uc3QgQ2xh
c3NJbmZvIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rp
b24iLCAmQmFzZTo6c18KICBAZW5kCiAgKi8KIAordXNpbmcgV2FzbTo6UGxhbjsKKwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3Rh
bmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gSWYgbW9kdWxlT2JqZWN0IGlz
IG5vdCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBpbnN0YW5jZSwgYSBUeXBlRXJyb3IgaXMgdGhyb3du
LgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWpzTW9k
dWxlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFy
Z3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1
bGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmFy
Z3VtZW50KDApKSkpKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBqc0R5bmFt
aWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAg
IGlmICghbW9kdWxlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJmaXJz
dCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHku
TW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVj
LT5hcmd1bWVudCgwKSkpKSk7CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0IHBhcmFtZXRl
ciBpcyBub3QgdW5kZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwg
YSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBleGVj
LT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0gaW1wb3J0QXJndW1l
bnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVmaW5lZCgpICYm
ICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZp
bmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9y
VmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1
bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5
cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBpbnN0
YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJl
KGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwotCi0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUlu
c3RhbmNlKGV4ZWMsIGpzTW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKSk7
Ci19Ci0KLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yOjpjcmVhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3Ry
dWN0dXJlKQotewotICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBqc01vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24o
KTsKLQotICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVjdCogZXJyb3IpIHsKLSAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9y
dHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBU
eXBlRXJyb3IgaXMgdGhyb3duLgotICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNp
emUoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5
Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRzIikpKTsKLQotICAgIElkZW50aWZpZXIgbW9kdWxlS2V5
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFtZShQcml2YXRlTmFtZTo6RGVzY3JpcHRp
b24sICJXZWJBc3NlbWJseUluc3RhbmNlIikpOwotICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
KiBtb2R1bGVSZWNvcmQgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsIHZt
LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVs
ZUtleSwgbW9kdWxlSW5mb3JtYXRpb24pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7Ci0KLQotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Ug
PSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpz
TW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIC8vIExldCBmdW5j
cywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFi
bGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2Vi
QXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgotICAgIC8vIExldCBpbXBvcnRz
IGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KLSAgICB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUltcG9ydEdsb2Jh
bHMgPSAwOwotCi0gICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKLSAgICBib29sIGhh
c1RhYmxlSW1wb3J0ID0gZmFsc2U7Ci0gICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxl
LmltcG9ydHM6Ci0gICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBv
cnRzKSB7Ci0gICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVy
Zm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KLSAgICAgICAgSlNWYWx1
ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5tb2R1
bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwot
ICAgICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9y
LgotICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImlt
cG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVU
eXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7Ci0KLSAgICAgICAgLy8gMy4gTGV0IHYg
YmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQotICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0LmZpZWxkKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAg
ICAgICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBhIGZ1bmN0aW9uIGlt
cG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMgZmFsc2UsIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0
IGJlIGNhbGxhYmxlIikpKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganND
YXN0PEpTT2JqZWN0Kj4odmFsdWUpOwotICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHdhc21GdW5jdGlvbjsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwotICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlI
b3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rp
b24pKSB7Ci0gICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMg
bm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJy
b3IuCi0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1
cmVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQotICAgICAgICAgICAg
ICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJ
bmRleCgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbXBv
cnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVd
XS4KLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5m
dW5jdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBXYXNtOjpTaWdu
YXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1w
b3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwotICAgICAgICAg
ICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidz
IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlv
bidzIHNpZ25hdHVyZSIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpaWkuIE90
aGVyd2lzZToKLSAgICAgICAgICAgIC8vIGEuIExldCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVu
Y3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdl
YkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVl
IGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNz
ZW1ibHlWYWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGU6IGRvbmUgYXMgcGFydCBvZiBQbGFuIGNv
bXBpbGF0aW9uLgotICAgICAgICAgICAgLy8gaXYuIEFwcGVuZCB2IHRvIGZ1bmNzLgotICAgICAg
ICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVs
ZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0
YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCi0K
LSAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRl
eCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0sIGZ1bmN0aW9u
LCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7Ci0gICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3Vy
ZSB0byBpbXBvcnRzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFs
aWRhdGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFi
bGUgaW1wb3J0KToKLSAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlUYWJsZSo+KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdl
YkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0g
ICAgICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJs
ZSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKLQot
ICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7Ci0gICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJ
bml0aWFsID0gdGFibGUtPnNpemUoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwg
ZXhwZWN0ZWRJbml0aWFsKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBv
cnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAgICAg
ICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVt
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScg
YnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRo
YW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCi0gICAgICAgICAgICAvLyBp
aWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAvLyA2
LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFo
YXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRh
dGlvbiBmYWlsdXJlLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5KTsKLSAgICAgICAgICAgIGhhc01lbW9yeUltcG9ydCA9IHRydWU7Ci0gICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNz
ZW1ibHlNZW1vcnkqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3Qg
YSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJv
ci4KLSAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KSkpOwotCi0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKLSAgICAgICAgICAgIFdhc206OlBhZ2VD
b3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS5pbml0aWFsKCk7Ci0gICAgICAg
ICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBp
cyB0b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVj
dGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKLSAgICAg
ICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5
KCkubWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEg
J21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11bSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhpbXVtJyBpcyBs
YXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgotICAgICAg
ICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAg
ICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgotICAgICAgICAgICAg
Ly8gaS4gSWYgaSBpcyBub3QgYW4gaW1tdXRhYmxlIGdsb2JhbCwgdGhyb3cgYSBUeXBlRXJyb3Iu
Ci0gICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2lu
ZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbDo6SW1tdXRhYmxlKTsKLSAgICAgICAg
ICAgIC8vIGlpLiBJZiB0aGUgZ2xvYmFsX3R5cGUgb2YgaSBpcyBpNjQgb3IgVHlwZSh2KSBpcyBu
b3QgTnVtYmVyLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlm
IChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUgPT0gV2Fz
bTo6STY0KQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgY2Fu
bm90IGJlIGFuIGk2NCIpKSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVt
YmVyIikpKTsKLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIFRvV2ViQXNzZW1ibHlWYWx1ZSh2
KSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gaW1w
b3J0LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJ
MzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxz
KyssIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2Jh
bChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9h
dChleGVjKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXYXNt
OjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9i
YWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIGlmICghIW1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkg
ewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgTWVtb3J5IGltcG9ydCBv
ciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKLSAg
ICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5p
dGlvbi4KLSAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsKLSAgICAgICAg
ICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSkKLSAg
ICAgICAgICAgICAgICBtZW1vcnkgPSBqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVtb3J5KCk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6
OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZW1vcnkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVt
b3J5KHZtLCBleGVjLAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVj
dHVyZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOwotICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVj
dCwgaW5zdGFuY2VTdHJ1Y3R1cmUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXM6CisgICAgLy8gMSkg
VGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGluaXRpYWxpemVkIENvZGVCbG9jayAocnVubmFi
bGUpLCBzbyB3ZSBqdXN0IG5lZWQgdG8gZmluYWxpemVDcmVhdGlvbi4KKyAgICAvLyAyKSBUaGUg
aW5zdGFuY2UgaGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBhbmQgY29t
cGlsZSB0aGUgY29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFz
IGFuIHVuaW5pdGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBj
b21waWxhdGlvbiB0byBmaW5pc2guCisKKyAgICBpZiAoIWluc3RhbmNlLT5pbml0aWFsaXplZCgp
KSB7CisgICAgICAgIGlmIChpbnN0YW5jZS0+Y29kZUJsb2NrKCkpCisgICAgICAgICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoaW5zdGFuY2UtPmNv
ZGVCbG9jaygpLT5wbGFuKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZjxXYXNt
OjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgpLCBQ
bGFuOjpGdWxsQ29tcGlsZSwgUGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgICAgICAgICBwbGFu
LT5zZXRNb2RlKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpOworICAgICAgICAgICAgaW5zdGFuY2Ut
PmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKHZtLCBwbGFuLmNvcHlSZWYoKSk7CisKKyAgICAgICAg
ICAgIGF1dG8mIHdvcmtsaXN0ID0gV2FzbTo6ZW5zdXJlV29ya2xpc3QoKTsKKyAgICAgICAgICAg
IHdvcmtsaXN0LmVucXVldWUocGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgd29ya2xpc3Qu
Y29tcGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdldCgpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHsKLSAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlv
biAmJiBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpIHsKLSAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIFRhYmxlIGltcG9ydCBvciB3ZSBz
aG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaGFzVGFibGVJbXBvcnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEhbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlz
SW1wb3J0KCkpOwotICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdzIGEg
VGFibGUgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUg
PSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAg
bW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKLSAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2
ZSBkZWZpbmVkLgotICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJn
ZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBBU1NFUlQodGFi
bGUpOyAKLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKLSAgICAgICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRo
dW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBz
ZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhl
YywgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCoobmV3IFdhc206
Ok1lbW9yeSgpKSkpKTsKLSAgICB9Ci0KLSAgICAvLyBHbG9iYWxzCi0gICAgewotICAgICAgICBB
U1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJbmZvcm1hdGlvbi5maXJzdEludGVybmFs
R2xvYmFsKTsKLSAgICAgICAgZm9yIChzaXplX3QgZ2xvYmFsSW5kZXggPSBudW1JbXBvcnRHbG9i
YWxzOyBnbG9iYWxJbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHMuc2l6ZSgpOyArK2ds
b2JhbEluZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBnbG9iYWwgPSBtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzW2dsb2JhbEluZGV4XTsKLSAgICAgICAgICAgIEFTU0VSVChnbG9iYWwu
aW5pdGlhbGl6YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOwotICAgICAgICAg
ICAgaWYgKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9tR2xv
YmFsSW1wb3J0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7Ci0gICAgICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xvYmFs
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFs
Qml0c09ySW1wb3J0TnVtYmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1vZHVsZVJlY29y
ZC0+bGluayhleGVjLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKLQotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBtb2R1bGVSZWNvcmQt
PmR1bXAoKTsKLSAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0
ZShleGVjKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Cisg
ICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0YW5j
ZSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cAppbmRleCA1OTcwOWY1MTc1NmRjNTVlYTJiZDI3ODY2MzUwNWU5ZTM5MzdmMDEzLi4zNTk5NjIy
ZjJjYTI0OWIxZTFkODEyMGNhMzYzYWQ2MTRlNWE2ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmNwcApAQCAtNzUsMTMgKzc1LDEzIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBidWZmCiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBzaXplX3QgYnl0ZU9mZnNldDsKLSAgICBzaXplX3QgYnl0ZVNpemU7Ci0g
ICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgYnVmZmVyLCBi
eXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBj
cmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIGJh
c2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgUmVmUHRyPFdhc206OlBsYW4+IHBsYW4g
PSBhZG9wdFJlZihuZXcgV2FzbTo6UGxhbih2bSwgKnNvdXJjZSwgV2FzbTo6UGxhbjo6VmFsaWRh
dGlvbiwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgaWYgKCFwbGFuLT5wYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKCkpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0dXJlKCks
IHBsYW4tPmVycm9yTWVzc2FnZSgpKSk7CisgICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3Zl
KHBsYW4pKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdl
YkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
CmluZGV4IGZmZmVlNWMxMGY1OWY4MWYxYmJlM2NmMWQ1NDc3Y2Y5MGM2ODdmNzAuLmZiNTYxZDlk
ZGI4N2U3NDA3MjlhNjI5YjUxODYxNzA1NDkxNmJhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAg
LTczLDggKzczLDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBXYXNtCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYywgdm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBvcnRzKQot
ICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRFbnRyeTo6Y3JlYXRlTG9jYWwoZXhwLmZpZWxk
LCBleHAuZmllbGQpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0
aW9uLmV4cG9ydHMpIHsKKyAgICAgICAgSWRlbnRpZmllciBmaWVsZCA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBleHAuZmllbGQpOworICAgICAgICBhZGRFeHBvcnRFbnRyeShFeHBvcnRF
bnRyeTo6Y3JlYXRlTG9jYWwoZmllbGQsIGZpZWxkKSk7CisgICAgfQogfQogCiB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkBAIC04NSwxNCArODcsMTMgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc3RhcnRGdW5jdGlvbik7CiB9CiAKLXZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0oc2NvcGUpOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGluc3RhbmNlLT5t
b2R1bGUoKTsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5j
ZS0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
ZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCkBAIC0xMTIsNyAr
MTEzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgICAgIC8vICAgaWkuIChO
b3RlOiBBdCBtb3N0IG9uZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGFueSBjbG9zdXJlLCBzbyBm
dW5jIGlzIHVuaXF1ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2NjdXJyYW5jZXMgaW4g
dGhlIGxpc3QuIE1vcmVvdmVyLCBpZiB0aGUgaXRlbSB3YXMgYW4gaW1wb3J0IHRoYXQgaXMgYWxy
ZWFkeSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0LCB0aGVuIHRoZSBvcmlnaW5h
bCBmdW5jdGlvbiBvYmplY3Qgd2lsbCBiZSBmb3VuZC4gRm9yIGltcG9ydHMgdGhhdCBhcmUgcmVn
dWxhciBKUyBmdW5jdGlvbnMsIGEgbmV3IHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLikKICAgICAg
ICAgICAgIGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rpb25JbXBvcnRDb3VudCkgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2luZEluZGV4OwotICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBvcnRGdW5j
dGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1
bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwog
ICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlv
bkltcG9ydCkpCiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbklt
cG9ydDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTEyOCw3ICsxMjksNyBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YQogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdh
c21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBjb25z
dCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZC5zdHJpbmcoKSwg
aW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2Fs
bGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAg
ICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhCiAgICAg
ICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gZmFsc2U7CiAgICAgICAgIGJvb2wg
aWdub3JlUmVhZE9ubHlFcnJvcnMgPSB0cnVlOwogICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZh
bHNlOwotICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZp
cm9ubWVudCwgZXhlYywgZXhwLmZpZWxkLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRP
bmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOworICAgICAgICBzeW1i
b2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVsZCksIGV4cG9ydGVkVmFsdWUsIHNob3Vs
ZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHB1dFJlc3VsdCk7CiAgICAgfQogCkBAIC0xOTIsNyArMTkz
LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5cGUo
KSA9PSBXYXNtOjpWb2lkKTsKICAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwg
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0
KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlKS0+Z2V0KCk7CisgICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9
IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAg
ICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlw
b2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CkBAIC0yNTEsNyArMjUyLDcgQEAgSlNW
YWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9u
SW5kaWNlc1tpXTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJs
b2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1wb3J0
RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNP
YmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1w
b3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNX
ZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFt
aWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgZnVuY3Rpb25JbXBvcnQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZXZlciBpbXBvcnQgYSBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiwgd2Ugc2V0IHRoZSBpbXBvcnQgYXMgdGhlIHVud3JhcHBlZCB2YWx1ZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5oCmluZGV4IDVkY2ViNDJkOGY4YzIwNjk4Mjk0YmFhMGM2YmJjZjQ5YjhkY2Q0M2Qu
LjJiODM3MmU3YzdjMzM5NDc4ZTliZTc2NTE3N2ViODUyNDE2ZDQ3ZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
aApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJs
eUZ1bmN0aW9uOwogCiAvLyBCYXNlZCBvbiB0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc3BlY2lm
aWNhdGlvbgpAQCAtNDcsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKICAgICBzdGF0
aWMgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVj
dHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYp
OwogCi0gICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwor
ICAgIHZvaWQgbGluayhFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShF
eGVjU3RhdGUqKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDVmOWQ5YWMxYjFmYmJjZDVjYjkxZDdmYWViZTQ4OWVk
MDViNDhmOC4uNGMzOTc5NmYyOTI1NDBjYmY3YTc1YWJmZmI3NTRmMWYxYWMxOWUxZCAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNyBAQAorMjAxNy0wMy0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBXZWJBc3NlbWJseTogTWFrZSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS9j
b21waWxlIHRydWx5IGFzeW5jaHJvbm91cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qczoKKyAgICAg
ICAgKGFzeW5jLnRlc3RQcm9taXNlQVBJKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNz
ZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50aHJvd0V4
bik6CisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKHAuY2F0Y2gpOgorICAgICAgICAq
IHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qczogQWRkZWQu
CisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKHAuY2F0Y2gpOgorICAgICAgICAqIHdh
c20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qczoKKyAgICAgICAgKGFzc2VydC5l
cS5hc3luYy50ZXN0KToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAgICh0ZXN0LmFzeW5j
LnRlc3QpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQudHJ1dGh5LmFzeW5jLnRl
c3QpOiBEZWxldGVkLgorICAgICAgICAoYXNzZXJ0LnRydXRoeSk6IERlbGV0ZWQuCisKIDIwMTct
MDMtMjMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAg
W0pTQ10gVXNlIGpzTm9udHJpdmlhbFN0cmluZyBhZ3Jlc3NpdmVseSBmb3IgVG9TdHJpbmcoSW50
NTIpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwppbmRleCBmMzQzYzZlOTNjNzMx
MjVlNDlhZDkzZjRhYTcyYTFhMDllNjllMmJiLi4zZDRkMjc4YmI0ZDg1OTRmNTI1NDMzYTkyNzk0
ZTJjMmZmZTQwMDlhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21w
aWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTEs
NyArMSw4IEBACithc3luY1Rlc3QoNCk7CisKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKLWxldCBk
b25lID0gZmFsc2U7CiBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICB7CiAg
ICAgICAgIC8vIENhbid0IGRlY2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCkBAIC0xNCwzOSAr
MTUsMzMgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICAu
Q29kZSgpCiAgICAgICAgICAgICAuRW5kKCk7CiAKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7
CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAg
ICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNl
b2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHko
ZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
NCAvIDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1l
bW9yeSAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpJykiKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkg
c2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOworICAgICAg
ICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0LnRydXRo
eSh0aHJldyk7CiAgICAgfQogCiAgICAgewotICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoKTsKICAg
ICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICB0aHJldyA9IHRydWU7CiAgICAgICAgICAg
ICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOwogICAgICAgICAgICAgYXNz
ZXJ0LmVxKGUubWVzc2FnZSwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlCdWZmZXJW
aWV3IG9yIGFuIEFycmF5QnVmZmVyIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5jb21waWxlKCkn
KSIpOworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgICAgIH0KLSAgICAgICAg
YXNzZXJ0LnRydXRoeSh0aHJldyk7CiAgICAgfQogCiAgICAgewotICAgICAgICBsZXQgdGhyZXcg
PSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5LmNv
bXBpbGUoMjApOwogICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIHRocmV3ID0gdHJ1
ZTsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcik7CiAg
ICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBh
biBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2Vt
Ymx5LmNvbXBpbGUoMjApJykiKTsKKyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAg
ICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKQEAg
LTYwLDExICs1NSw4IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogCiAgICAg
ICAgIGxldCBtb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIGFzc2VydC50cnV0aHkobW9kdWxlIGluc3RhbmNlb2Yg
V2ViQXNzZW1ibHkuTW9kdWxlKTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAgfQot
Ci0gICAgZG9uZSA9IHRydWU7CiB9CiAKIHRlc3RQcm9taXNlQVBJKCk7Ci1kcmFpbk1pY3JvdGFz
a3MoKTsKLWFzc2VydC50cnV0aHkoZG9uZSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3dlYi1hc3NlbWJseS1jb21waWxlLXBhcmFsbGVsLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFw
aS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjZhMzZmYmRk
ZmQ1MjFjMmRkOTVlNjNmN2JlYWI0NWEzYjRhOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsx
LDY1IEBACithc3luY1Rlc3QoMSk7CisKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnOworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisKK2FzeW5jIGZ1
bmN0aW9uIHRocm93RXhuKCkgeworICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCithc3luYyBm
dW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0IGxvb3BEZXB0aCA9IDEwOworICAgIGNvbnN0IG51
bUNvbXBpbGF0aW9ucyA9IDE7CisgICAgY29uc3QgbnVtVmFycyA9IDMwOworICAgIGNvbnN0IHBh
cmFtcyA9IFtdOworICAgIHBhcmFtcy5sZW5ndGggPSBudW1WYXJzOworICAgIHBhcmFtcy5maWxs
KCJpMzIiKTsKKworICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgICAg
LlR5cGUoKS5FbmQoKQorICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtcywg
cmV0OiAiaTMyIiB9KTsKKworICAgIGNvbnN0IG1ha2VMb29wID0gKGJ1aWxkZXIsIGRlcHRoKSA9
PiB7CisgICAgICAgIGlmIChkZXB0aCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVy
OworCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgICAgICAuTG9vcCgiaTMyIiwg
KGIpID0+IHsKKyAgICAgICAgICAgICAgICAgIGIuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5JMzJTdWIoKQorICAgICAg
ICAgICAgICAgICAgICAuVGVlTG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2Fs
KDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAu
QnJJZigxKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTG9vcChiLCBkZXB0aCAtIDEp
LkJyKDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBidWlsZGVyCisKKyAgICB9
CisKKyAgICBidWlsZGVyID0gbWFrZUxvb3AoYnVpbGRlciwgbG9vcERlcHRoKTsKKyAgICBidWls
ZGVyID0gYnVpbGRlci5FbmQoKS5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKworICAgIGxldCBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IG51bUNvbXBpbGF0aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBpbGF0
aW9ucy5wdXNoKFdlYkFzc2VtYmx5LmNvbXBpbGUoYmluKSk7CisgICAgfQorCisgICAgYXdhaXQg
UHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKK30KKworbGV0IHAgPSB0ZXN0KCk7CitwLmNhdGNo
KChlKSA9PiB7CisgICAgcHJpbnQoIkZhaWxlZDogIiwgZSk7CisgICAgcHJpbnQoZS5zdGFjayk7
Cit9KTsKK3AudGhlbigoKSA9PiBhc3luY1Rlc3RQYXNzZWQoKSk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVsLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRmNTc2NDk1Y2Y5NDg2ZjVkOTkwZjdmOTM3NjQzOWZiYzcwYmQ0YWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0
ZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsxLDgyIEBACithc3luY1Rlc3QoMSk7CisKK2ltcG9ydCAq
IGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4v
QnVpbGRlci5qcyc7CisKK2FzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgY29uc3QgbG9vcERl
cHRoID0gMTAwOworICAgIGNvbnN0IG51bUNvbXBpbGF0aW9ucyA9IDE7CisgICAgY29uc3QgbnVt
VmFycyA9IDMwOworICAgIGNvbnN0IHBhcmFtcyA9IFtdOworICAgIHBhcmFtcy5sZW5ndGggPSBu
dW1WYXJzOworICAgIHBhcmFtcy5maWxsKCJpMzIiKTsKKworICAgIGxldCBidWlsZGVyID0gKG5l
dyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisg
ICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgeyBpbml0aWFsOiAwIH0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtcywgcmV0OiAiaTMyIiB9KTsK
KworICAgIGNvbnN0IG1ha2VMb29wID0gKGJ1aWxkZXIsIGRlcHRoKSA9PiB7CisgICAgICAgIGlm
IChkZXB0aCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyOworCisgICAgICAgIGJ1
aWxkZXIgPSBidWlsZGVyCisgICAgICAgICAgICAuTG9vcCgiaTMyIiwgKGIpID0+IHsKKyAgICAg
ICAgICAgICAgICBiLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgx
KQorICAgICAgICAgICAgICAgICAgICAuSTMyU3ViKCkKKyAgICAgICAgICAgICAgICAgICAgLlRl
ZUxvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAgICAgLkJySWYoMSk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZUxvb3AoYiwgZGVwdGggLSAxKS5CcigwKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gYnVpbGRlcjsKKyAgICB9CisKKyAgICBidWlsZGVyID0g
bWFrZUxvb3AoYnVpbGRlciwgbG9vcERlcHRoKTsKKyAgICBidWlsZGVyID0gYnVpbGRlci5FbmQo
KS5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogMCB9
KTsKKyAgICBjb25zdCBpbXBvcnRPYmplY3QgPSB7ICJpbXAiOiB7ICJtZW1vcnkiOiBtZW1vcnkg
fSB9OworCisgICAgLy8gQ29tcGlsZSBhIGJ1bmNoIG9mIGluc3RhbmNlcyBpbiBwYXJhbGxlbC4K
KyAgICBsZXQgY29tcGlsYXRpb25zID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1D
b21waWxhdGlvbnM7ICsraSkgeworICAgICAgICBjb21waWxhdGlvbnMucHVzaChXZWJBc3NlbWJs
eS5pbnN0YW50aWF0ZShiaW4sIGltcG9ydE9iamVjdCkpOworICAgIH0KKworICAgIGxldCBbaW5z
dF0gPSBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworICAgIGxldCBtb2R1bGUgPSBp
bnN0Lm1vZHVsZTsKKworICAgIC8vIENvbXBpbGUgYSBidW5jaCBvZiBpbnN0YW5jZXMgZnJvbSBt
b2R1bGVzIGluIHBhcmFsbGVsLgorICAgIGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25z
LnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLCBpbXBvcnRPYmplY3QpKTsKKyAg
ICB9CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworCisgICAgLy8gQ29t
cGlsZSBhbiBpbnN0YW5jZSBmcm9tIGEgbW9kdWxlIGluIHBhcmFsbGVsLCBoYXZlIHN5bmMgY29t
cGlsYXRpb24gc3RlYWwgaXQuCisgICAgY29tcGlsYXRpb25zID0gW107CisgICAgY29tcGlsYXRp
b25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLCBpbXBvcnRPYmplY3QpKTsK
KyAgICBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgaW1wb3J0T2JqZWN0
KTsKKworICAgIGF3YWl0IFByb21pc2UuYWxsKGNvbXBpbGF0aW9ucyk7Cit9CisKK2xldCBwID0g
dGVzdCgpOworcC5jYXRjaCgoZSkgPT4geworICAgIHByaW50KCJGYWlsZWQ6ICIsIGUpOworICAg
IHByaW50KGUuc3RhY2spOworfSk7CitwLnRoZW4oKCkgPT4gYXN5bmNUZXN0UGFzc2VkKCkpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUu
anMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcwppbmRl
eCBhOTNiYzYwNWZmMTdkZGVlODAxZjdhNzUzMzQxODZhODYxZDQ0MmFkLi43MmZjNDdlMjUyZGQ3
NDRiY2YyMDg1YTk0ZjE2YmZhYmM1MGEwYzQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcwpAQCAtMSwzICsxLDUgQEAKK2FzeW5jVGVzdCg3
KTsKKwogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIApAQCAtMTksMTggKzIxLDE1IEBAIGFzc2VydC5l
cShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0g
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAg
ICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQge21vZHVsZSwgaW5zdGFuY2V9
ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKTsKICAgICAgICAgYXNzZXJ0LnRy
dXRoeShtb2R1bGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Nb2R1bGUpOwogICAgICAgICBhc3Nl
cnQudHJ1dGh5KGluc3RhbmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwogICAg
ICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAotICAgIHRlc3Qo
KTsKLSAgICBkcmFpbk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOworICAg
dGVzdCgpOwogfQogCiB7CkBAIC00OCwxOSArNDcsMTYgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0
aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5z
dGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBudWxsKTsKICAgICAg
ICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAic2Vjb25k
IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlIG11c3QgYmUgdW5kZWZpbmVkIG9y
IGFuIE9iamVjdCAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBudWxs
KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIGFzeW5jVGVz
dFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFpbk1pY3JvdGFza3MoKTsK
LSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC03OCwyMCArNzQsMTcgQEAgYXNz
ZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBi
aW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNl
OwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICBsZXQge21vZHVsZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUo
YmluKTsKICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUg
aW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IpOwotICAgICAgICAgICAgYXNzZXJ0
LmVxKGUubWVzc2FnZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBjb250
cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZSwgaW4gZnVuY3Rpb24gYXQgaW5k
ZXggMCAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluKScpIik7CisgICAg
ICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
dmFsaWRhdGU6IGNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLCBpbiBm
dW5jdGlvbiBhdCBpbmRleCAwIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFp
bk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC0xMTAs
MTkgKzEwMywxNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAx
KTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAg
IGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAg
dHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3Nl
bWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pOwogICAgICAgICB9IGNh
dGNoKGUpIHsKLSAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0
IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkgKGV2YWx1YXRpbmcgJ1dl
YkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSknKSIpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUg
PSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAgICB0ZXN0KCk7
Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKIH0KIAog
ewpAQCAtMTQxLDIwICsxMzEsMTcgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRl
Lmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7
CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CiAgICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3Nl
bWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pOwogICAgICAgICB9IGNh
dGNoKGUpIHsKLSAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0
IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkgKGV2YWx1YXRpbmcgJ1dl
YkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwge2ltcDoge21lbW9yeTogMjB9fSknKSIpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwgIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUg
PSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAgICB0ZXN0KCk7
Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKIH0KIAog
ewpAQCAtMTcyLDE4ICsxNTksMTUgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRl
Lmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7
CiAgICAgICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAg
ICAgIGxldCBpbnN0YW5jZSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSk7
CiAgICAgICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5J
bnN0YW5jZSk7CiAgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCksIDEp
OwotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAgICAg
fQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0
aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTIwMiw3ICsxODYsNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1i
bHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVu
Y3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2Vt
Ymx5Lmluc3RhbnRpYXRlKDI1KTsKQEAgLTIxMCwxMCArMTkzLDggQEAgYXNzZXJ0LmVxKFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogQmV0
dGVyIGVycm9yIG1lc3NhZ2UgaGVyZS4KICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2Us
ICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1
ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoMjUpJykiKTsKICAgICAg
ICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFzc2VkKCk7CiAg
ICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50
cnV0aHkoZG9uZSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305451</attachid>
            <date>2017-03-27 00:27:39 -0700</date>
            <delta_ts>2017-03-27 15:30:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170327002738.patch</filename>
            <type>text/plain</type>
            <size>226448</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li5mN2E2MWM3ZjQ0MTM1NjBk
M2QzYjZkMTk2NDljMmU0NTViMDM0Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0KToK
KyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkKToKKyAgICAgICAgKGZ1bmN0aW9uVGVz
dFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1l
bnRzKToKKyAgICAgICAgKHJ1bkpTQyk6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb21pc2VEZWZlcnJlZC5oOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6
cHJvbWlzZUFzeW5jUGVuZGluZyk6CisgICAgICAgICogcnVudGltZS9KU1J1bkxvb3BUaW1lci5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3Bw
LgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIpOgorICAgICAg
ICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcCk6CisgICAgICAgIChKU0M6OkpTUnVu
TG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1l
cjo6dGltZXJEaWRGaXJlKToKKyAgICAgICAgKEpTQzo6SlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIpOgorICAg
ICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1J1bkxvb3BUaW1lci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlBy
b21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcik6CisgICAgICAgIChKU0M6
OlByb21pc2VEZWZlcnJlZFRpbWVyOjpkb1dvcmspOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6cnVuUnVuTG9vcCk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRp
bWVyOjphZGRQZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRp
bWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJl
ZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVycmVk
VGltZXI6OnNjaGVkdWxlQmxvY2tlZFRhc2spOgorICAgICAgICAqIHJ1bnRpbWUvUHJvbWlzZURl
ZmVycmVkVGltZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oLgorICAgICAgICAoSlNDOjpQcm9taXNlRGVmZXJyZWRUaW1lcjo6c3RvcFJ1bm5p
bmdUYXNrcyk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAg
ICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwOgorICAgICAgICAoSlNDOjpyZWplY3QpOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6cmVz
b2x2ZSk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGls
ZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICog
d2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
cGxhbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnJ1bm5hYmxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZXJyb3JNZXNzYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FsbGVlcyk6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6Om1lbW9yeUtpbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBp
bGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246Omlu
dGVybmFsRnVuY3Rpb25Db3VudCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9u
OjpNZW1vcnlJbmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246Om1heGltdW0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6aGFzUmVzZXJ2ZWRNZW1vcnkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6dGFrZVJl
c2VydmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Om1vZGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5j
cHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFyc2VyKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFu
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OnN0YXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW92ZVRv
U3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpmYWlsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpUaHJlYWRDb3VudEhv
bGRlcjo6VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpUaHJl
YWRDb3VudEhvbGRlcjo6flRocmVhZENvdW50SG9sZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBs
ZXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6d2FpdEZvckNvbXBsZXRpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjYW5jZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjpydW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpl
eHBvcnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZU1vZHVsZUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZUNhbGxMaW5rSW5mb3MpOgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjp0YWtlV2FzbUV4aXRTdHVicyk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46Om1vZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpzZXRNb2RlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6c2V0UGVuZGluZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpwZW5kaW5nUHJvbWlzZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnZtKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6ZmFpbGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzV29yayk6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46Omhhc0JlZW5QcmVwYXJlZCk6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbklubGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aW5p
dGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpX
b3JrbGlzdDo6cHJpb3JpdHlTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
UXVldWVFbGVtZW50OjpuZXh0UHJpb3JpdHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21wbGV0ZVBsYW5T
eW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFu
c0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChKU0M6Oldhc206
OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjplbnN1cmVXb3Jr
bGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisgICAgICAgIChK
U0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29y
a2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbml0
aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9S
dW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNl
dE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVkKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1i
bHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBhZnRlciB3ZSBkbyBUTFMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODI2N2QwMzEwODZlNTU2MDljOGI5ZWU3NmMy
OTVmN2IyN2FkM2MzZi4uODI2N2FlYWQyYjA5ZGFkNDM2YzEwYzNiZGQ1ZTYyNjQ3YWIxZWVhMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTAxLDcgKzUwMSw2IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwUHJvZmlsZXIuY3BwCiAgICAg
aGVhcC9IZWFwU25hcHNob3QuY3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAot
ICAgIGhlYXAvSGVhcFRpbWVyLmNwcAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAog
ICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCiAgICAgaGVhcC9MYXJnZUFsbG9jYXRpb24u
Y3BwCkBAIC04MDAsNiArNzk5LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBy
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKICAgICBydW50aW1lL0pTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuY3BwCiAgICAgcnVudGltZS9KU1Byb3h5LmNwcAorICAgIHJ1bnRpbWUv
SlNSdW5Mb29wVGltZXIuY3BwCiAgICAgcnVudGltZS9KU1Njb3BlLmNwcAogICAgIHJ1bnRpbWUv
SlNTY3JpcHRGZXRjaGVyLmNwcAogICAgIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAKQEAgLTg0OSw2ICs4NDksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHAKICAgICBydW50aW1lL09wdGlvbnMuY3BwCiAgICAgcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKKyAgICBydW50aW1lL1Byb21pc2VEZWZlcnJlZFRp
bWVyLmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAogICAgIHJ1bnRpbWUv
UHJvcGVydHlTbG90LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKQEAgLTk0Miw2
ICs5NDMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHdhc20vV2FzbVBsYW4u
Y3BwCiAgICAgd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAogICAgIHdhc20vV2FzbVZhbGlkYXRlLmNw
cAorICAgIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjAwMzEwYzM3YWIxNGE3MmRmNTdhYjI5MWM4MmNh
NzQwMzc4M2MwZC4uZWJhNGMzMjA3YmQzZmJiNjNhMmMwYjM4YTYyNzk4NThkYWQzZGU3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMTYsMTEgKzEzMTYsMTcgQEAKIAkJNTJD
OTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIz
MDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OworCQk1MzBGQjMwNDFF
N0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNt
V29ya2xpc3QuY3BwICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBs
YW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3
NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEzNzRCRjFENUNF
OTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNw
cCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzAxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3Bw
ICovOyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0
MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsK
KwkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBG
MTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29w
VGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLzsgfTsKKwkJ
NTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3NDFFNzBEREVD
MDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLzsgfTsKKwkJNTM0NjM4NzcxRTcx
RTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAv
KiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMxNzk1QzMwMEY2
RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTUzNDg2QkJC
MUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FGIC8qIEpT
VHlwZWRBcnJheS5jcHAgKi87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNCOCAvKiBUeXBl
ZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi87
IH07CkBAIC0xMzU1LDYgKzEzNjEsNyBAQAogCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyog
V2FzbU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAq
LzsgfTsKIAkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTYx
RDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovOyB9OwogCQk1M0Y2QkY2
RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y2QkY2QzFD
M0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNGOEQyMDAx
RTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdh
c21QbGFuSW5saW5lcy5oICovOyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGQTJBRTMx
Q0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJNTNGRDA0RDMxRDdBQjI3NzAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmNwcCAqLzsgfTsKQEAgLTIyMzMsOCArMjI0MCw2IEBACiAJCUMyQ0YzOUMx
MTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUg
LyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5
QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVy
T2JqZWN0LmggKi87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3
ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8q
IEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKLQkJ
QzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8q
IEhlYXBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2
QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9OwogCQlDMkZDQUUx
MDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVC
YXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM4MDAsMTEgKzM4MDUsMTcgQEAKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8q
IFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyog
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29y
a2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdvcmtsaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbVdvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMzc0QkMx
RDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJF
MUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSdW5Mb29w
VGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIxRTcwRDAxNTAw
RjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQ
cm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8q
IFR5cGVkQXJyYXlDVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBUeXBlZEFycmF5Q1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJyYXlDVGVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ1LDYgKzM4NTYsNyBAQAogCQk1
M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVQ
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBB
MDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjEx
MTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFF
MDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ3ODgsOCArNDgwMCw2IEBACiAJCUMyQ0YzOUJGMTZFMTVBODEwMERE
NjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAv
KiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQjE1OTBFRjAwMDA1
NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyRTUyNkJD
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBG
MkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FF
MEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU5MDQsOCArNTkxNCw2IEBACiAJCQkJQTU0QzJBQUYxQzY1NDREMTAw
QTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovLAogCQkJCUE1MzExQzM0MUM3N0NFQUMwMEU2QjFC
NiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLywKIAkJCQlBNTMxMUMzNTFDNzdDRUFDMDBF
NkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oICovLAotCQkJCUMyRTUyNkJCMTU5MEVGMDAw
MDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAotCQkJCUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4
RCAvKiBIZWFwVGltZXIuaCAqLywKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVh
cFV0aWwuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50
YWxTd2VlcGVyLmggKi8sCkBAIC02MjczLDExICs2MjgxLDE0IEBACiAJCQkJNTNGNDBFOEMxRDU5
MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBB
RjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAv
KiBXYXNtUGxhbi5oICovLAorCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxh
bklubGluZXMuaCAqLywKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rp
b25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUu
Y3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmgg
Ki8sCiAJCQkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgKi8s
CiAJCQkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5oICovLAorCQkJ
CTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovLAorCQkJCTUz
MEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NDM0LDYgKzY0NDUs
OCBAQAogCQkJCTE0QTE1NjMwMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5o
ICovLAogCQkJCUJDRDIwMzQ3MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmNwcCAq
LywKIAkJCQlCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5oICovLAor
CQkJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAg
Ki8sCisJCQkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVy
LmggKi8sCiAJCQkJMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVByb3BlcnR5QXR0
cmlidXRlcy5oICovLAogCQkJCTBGRTA1MDBGMUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1
bWVudHMuY3BwICovLAogCQkJCTBGRTA1MDEwMUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1
bWVudHMuaCAqLywKQEAgLTY4MjIsNiArNjgzNSw4IEBACiAJCQkJMEY3QzM5RkMxQzhGNjU5NTAw
NDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3
MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3
MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzIxRTcwRDAxNTAw
RjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBG
MTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQk3MEIwQTlEMDFBOUI2NjIwMDAwMTMw
NkEgLyogUnVudGltZUZsYWdzLmggKi8sCiAJCQkJNTI3NzczREQxQUFGODNBQzAwQkRFN0U4IC8q
IFJ1bnRpbWVUeXBlLmNwcCAqLywKIAkJCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVu
dGltZVR5cGUuaCAqLywKQEAgLTgxMTYsNiArODEzMSw3IEBACiAJCQkJMEZFQzg1MDYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUw
ODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21w
aWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMzUsNiArODI1MSw3IEBACiAJCQkJQkMxOEMzRUQw
RTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlE
OERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
NDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODUyMSw2ICs4NTM4LDcg
QEAKIAkJCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVyU2V0dGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyogRE9NSklUSGVh
cFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0MwOEUzQzFEQTQxQjgxMDAzOTQ3OEYgLyog
RE9NSklUUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzExRTcwQ0YzRDAw
RjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNTZERTFF
NjRFQUQ2MDBEMTc4MDEgLyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM3QUQ4M0Mx
REE0OTI4NjAwRjNENDEyIC8qIERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzN0FEODNEMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRSZWcuaCBpbiBIZWFkZXJz
ICovLApAQCAtODY5MCw3ICs4NzA4LDYgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0MDA2MEE5NjMg
LyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFDNjU0NEYyMDBB
MThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMxMUMzNjFDNzdD
RUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVl
LmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzksNiArOTE1Niw3IEBACiAJCQkJQkMxOEM0NUEwRTE2
RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3
QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJD
MjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rv
ci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAvKiBS
ZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3QTUz
MTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5NTgsNiArOTk3Niw3IEBACiAJ
CQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMEZCMzA0MUU3QTExNDYwMDND
MTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MjJBNjIxQzE1
OEU2QTAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMzM4REY1MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI1MSw2ICsxMDI3MCw3IEBACiAJCQkJMTRBRDkxMTcx
RENBOTdGRDAwMTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3MzQxRTIxREMyQ0U5NjAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1NDk4MjAzMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTM0NjM4NzMxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNl
cHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8q
IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMkRFMEYx
OTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDMyOCw3ICsxMDM0OCw2IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYzIC8qIEhlYXBQ
cm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVFMDBBMThENzgg
LyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NFQ0Ew
MEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMy
RTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElDU3RhdHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8qIElkZW50aWZp
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDY1Miw2ICsxMDY3MSw3IEBACiAJCQkJOTkyQUJD
RjkxQkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTkyRjU2QjQxRTRFODRBNDAwMzU5NTNCIC8qIFJlbW90ZUNvbm5lY3Rpb25U
b1RhcmdldENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4RUQ2NzQxQkVENzBBQzAwREQ4
MDE3IC8qIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90ZUluc3BlY3Rp
b25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NTY2ODYxRTRFOEIwRjAwQUFFMTND
IC8qIFJlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNTFFNEU4
NEE4MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKaW5kZXgg
ZGRlZTI1ODNlNDllNmI5NjkzOTA4MGUzMzhlYjVhOTljMDQwYjkyYy4uZmE3YjY0ZGE5YzQzMWY3
ZjAyMTgxN2JiOTRhOTQ5NmYxNmVjMTU3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRikKQEAgLTQwLDggKzQwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOwogY2xhc3Mg
SGVhcDsKIAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrIDogcHVi
bGljIEhlYXBUaW1lciB7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJh
Y2sgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHR5cGVkZWYgSlNSdW5M
b29wVGltZXIgQmFzZTsKICAgICBzdGF0aWMgUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s+
IGNyZWF0ZUZ1bGxUaW1lcihIZWFwKik7CiAgICAgc3RhdGljIFJlZlB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IGNyZWF0ZUVkZW5UaW1lcihIZWFwKik7CiAKQEAgLTcwLDIxICs3MSwyMSBAQCBwcm90
ZWN0ZWQ6CiAKICNpZiBVU0UoQ0YpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAg
ICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2Vu
YWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsKICAgICB9CiAj
ZWxpZiBVU0UoR0xJQikKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQotICAgICAgICA6
IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0
cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiAgICAgewogICAgIH0KICNlbHNlCiAg
ICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisg
ICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICB7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYzOTYxMjhkMDM4MzhjYTRhNzQ1NTBlZDkxNmRmNzdhMzI1ZDZiNDQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKLQotI2luY2x1
ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5o
IgotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIKLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGliLmg+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgCi1jb25zdCBDRlRpbWVJ
bnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7Ci0K
LUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX2Fw
aUxvY2soJnZtLT5hcGlMb2NrKCkpCi17Ci0gICAgc2V0UnVuTG9vcCh2bS0+aGVhcC5ydW5Mb29w
KCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG9v
cCkKLXsKLSAgICBpZiAobV9ydW5Mb29wKSB7Ci0gICAgICAgIENGUnVuTG9vcFJlbW92ZVRpbWVy
KG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsK
LSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwotICAgICAg
ICBtX3J1bkxvb3AuY2xlYXIoKTsKLSAgICAgICAgbV90aW1lci5jbGVhcigpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAocnVuTG9vcCkgewotICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOwotICAg
ICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkp
OwotICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7Ci0gICAgICAgIG1fdGltZXIgPSBhZG9w
dENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNfZGVjYWRlLCBz
X2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsKLSAg
ICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBr
Q0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIH0KLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVy
KCkKLXsKLSAgICBzZXRSdW5Mb29wKDApOwotfQotCi12b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRG
aXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotewotICAgIEhlYXBUaW1l
ciogdGltZXIgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihjb250ZXh0UHRyKTsKLSAgICB0aW1l
ci0+bV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBSZWZQdHI8Vk0+IHZtID0gdGltZXItPm1fYXBp
TG9jay0+dm0oKTsKLSAgICBpZiAoIXZtKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBk
ZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIHRpbWVyLT5tX2Fw
aUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKLSAgICAgICAgdGltZXItPmRvV29yaygp
OwotICAgIH0KLQotICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12b2lkIEhl
YXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17Ci0gICAg
Q0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9
IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci0gICAgQ0ZSdW5M
b29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCkgKyBzX2RlY2FkZSk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOwotfQotCi0j
ZWxpZiBVU0UoR0xJQikKLQotY29uc3QgbG9uZyBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2
MCAqIDI0ICogMzY1ICogMTA7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgaGVhcFRpbWVyU291cmNl
RnVuY3Rpb25zID0gewotICAgIG51bGxwdHIsIC8vIHByZXBhcmUKLSAgICBudWxscHRyLCAvLyBj
aGVjawotICAgIC8vIGRpc3BhdGNoCi0gICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5jIGNhbGxi
YWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAgICAgIHJldHVy
biBjYWxsYmFjayh1c2VyRGF0YSk7Ci0gICAgfSwKLSAgICBudWxscHRyLCAvLyBmaW5hbGl6ZQot
ICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKLSAgICBudWxscHRyLCAvLyBjbG9zdXJl
X21hcnNoYWxsCi19OwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0gICAgOiBtX3Zt
KHZtKQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotICAgICwgbV90aW1lcihhZG9w
dEdSZWYoZ19zb3VyY2VfbmV3KCZoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNpemVvZihHU291
cmNlKSkpKQotewotICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCksICJbSmF2YVNj
cmlwdENvcmVdIEhlYXBUaW1lciIpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVy
LmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewotICAgICAgICBhdXRv
JiBoZWFwVGltZXIgPSAqc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4odXNlckRhdGEpOwotICAgICAg
ICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShoZWFwVGltZXIubV90aW1lci5nZXQoKSwgZ19nZXRf
bW9ub3RvbmljX3RpbWUoKSArIEhlYXBUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7
Ci0gICAgICAgIGhlYXBUaW1lci50aW1lckRpZEZpcmUoKTsKLSAgICAgICAgcmV0dXJuIEdfU09V
UkNFX0NPTlRJTlVFOwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFj
aChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Ci19
Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci0gICAgZ19zb3VyY2VfZGVzdHJveShtX3Rp
bWVyLmdldCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSgpCi17Ci0gICAg
bV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkgewotICAgICAg
ICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVw
LgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOwotICAgICAgICBkb1dv
cmsoKTsKLSAgICB9Ci0KLSAgICBtX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12b2lkIEhlYXBU
aW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17Ci0gICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1faXNTY2hlZHVs
ZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQotewotICAgIGdf
c291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1l
KCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1bGVkID0gZmFs
c2U7Ci19Ci0jZWxzZQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAgIDogbV92bSh2
bSkKLXsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLX0KLQotdm9pZCBIZWFwVGlt
ZXI6OmludmFsaWRhdGUoKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihk
b3VibGUpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci19Ci0jZW5k
aWYKLSAgICAKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI0NzFmNjBkYjhjNjM3
NGM1NTAxOThkMGJlOWUyZmNjYThhNmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCisr
KyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpT
TG9jazsKLWNsYXNzIFZNOwotCi1jbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8SGVhcFRpbWVyPiB7Ci1wdWJsaWM6Ci0gICAgSGVhcFRpbWVyKFZNKik7Ci0jaWYg
VVNFKENGKQotICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwg
dm9pZCopOwotI2VuZGlmCi0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SGVh
cFRpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKLQotICAgIHZvaWQgc2No
ZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIHZvaWQgY2FuY2VsVGlt
ZXIoKTsKLSAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NjaGVkdWxl
ZDsgfQotCi0jaWYgVVNFKENGKQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UnVuTG9v
cChDRlJ1bkxvb3BSZWYpOwotI2VuZGlmIC8vIFVTRShDRikKLSAgICAKLXByb3RlY3RlZDoKLSAg
ICBWTSogbV92bTsKLQotICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLSAgICBib29sIG1f
aXNTY2hlZHVsZWQgeyBmYWxzZSB9OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMgY29uc3QgQ0ZU
aW1lSW50ZXJ2YWwgc19kZWNhZGU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+
IG1fdGltZXI7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29wOwotICAgIAot
ICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7Ci0KLSAgICBMb2NrIG1fc2h1dGRv
d25NdXRleDsKLSNlbGlmIFVTRShHTElCKQotICAgIHN0YXRpYyBjb25zdCBsb25nIHNfZGVjYWRl
OwotICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3RpbWVy
OwotI2VuZGlmCi0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5j
cmVtZW50YWxTd2VlcGVyLmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2MzU2Njk0MTFl
MTdkYzBhYzUyLi44Y2JmYTllODA0MGRjNjFlZmIwMTliMjE0NTU0NDU1ZTJmYTgzMWI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAK
QEAgLTQxLDExICs0MSwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGltZU11bHRpcGxp
ZXIgPSAxLjAgLyBzd2VlcFRpbWVUb3RhbDsKIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNj
aGVkdWxlVGltZXIoKQogewotICAgIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihzd2VlcFRpbWVT
bGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOworICAgIEJhc2U6OnNjaGVkdWxlVGltZXIoc3dl
ZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKIH0KIAogSW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBUaW1lcihoZWFw
LT52bSgpKQorICAgIDogQmFzZShoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50QWxsb2NhdG9y
KG51bGxwdHIpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVu
dGFsU3dlZXBlci5oCmluZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3Yzc4OWE2YWUxMTk4MDNi
ZTYuLmRmMWNmYzkyNDk2YTdkYTQ2NjEwZWFhMmY3NTZmZDNjYTVhYjVkYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgiCisjaW5jbHVk
ZSAiSlNSdW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEhlYXA7CiBj
bGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAKLWNsYXNzIEluY3JlbWVudGFsU3dlZXBlciA6IHB1Ymxp
YyBIZWFwVGltZXIgeworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEpTUnVuTG9v
cFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTd2VlcGluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCmluZGV4IDZl
MzE3NmMyY2M3NmI2ODQ0YzNhZmViMDczYzZiY2ExM2Y0NWQzY2MuLjk0MGQzOWRlMjRhY2ZkMzJk
OTZhNGFjMjFlZDJjMmE1MzE3YzIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIo
Vk0qIHZtKQotICAgIDogSGVhcFRpbWVyKHZtKQorICAgIDogQmFzZSh2bSkKIHsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKaW5k
ZXggYTY4MzE4NDc0ODljODZjMzZiNjg5ZTE4ZGEwNDg2M2ExZTRlZTQ0NS4uZmViZjUxNmFmNTQ4
NGIwY2JkMDgwNmQ0Y2MzNDlkOTc0OTdiZjI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCkBAIC0yNSwxNCArMjUsMTUgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxv
b3BUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAotY2xhc3MgU3Rv
cElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIFN0b3BJZk5lY2Vz
c2FyeVRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVm
IEpTUnVuTG9vcFRpbWVyIEJhc2U7CiAgICAgZXhwbGljaXQgU3RvcElmTmVjZXNzYXJ5VGltZXIo
Vk0qKTsKICAgICAKICAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oCmluZGV4IDZiODE5N2M2ODY2YTA1OTk1YjMyYTg4
YmU3OTQxZGQwZmQxYjkwYTYuLjIwNWZiMDRmYjY5MTQ3ZDhmZDVlNzJhZTEwYTAzMmQ1MWUxM2Q5
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZ0lubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAppbmRleCBhZDRhMzE0MDhhNmIzNWIyOWQzYzU0YjkxYTM2OTBlNWU1MDEwYTQ3Li4zYTM4ZGNk
OTc4NGZhNWU5N2M0ZmRkOTM3Mjc0NDNmZjUwMmEwM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApA
QCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiUGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1By
b2ZpbGVyLmgiCkBAIC03Myw4ICs3NCw5IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgi
CiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5o
IgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5o
IgogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRp
by5oPgpAQCAtOTA3LDggKzkwOSw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRHZXR0ZXJDb21w
bGV4OjpzX2luZm8gPSB7ICJET01KSVRHZXR0ZXJDb21wbGV4IiwgJkJhc2U6OnNfCiBjb25zdCBD
bGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUpJVEZ1bmN0aW9u
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShET01K
SVRGdW5jdGlvbk9iamVjdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5m
byA9IHsgIlJ1bnRpbWVBcnJheSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogY29uc3QgQ2xhc3NJbmZvIFNpbXBsZU9iamVjdDo6
c19pbmZvID0geyAiU2ltcGxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShTaW1wbGVPYmplY3QpIH07Ci1zdGF0aWMgYm9vbCB0ZXN0MjYyQXN5bmNQ
YXNzZWQgeyBmYWxzZSB9Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jVGVzdCB7IGZhbHNlIH07
CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0UGFzc2VzIHsgMCB9Oworc3RhdGljIHVuc2lnbmVk
IGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzIHsgMCB9OwogCiBFbGVtZW50SGFuZGxlT3duZXIqIEVs
ZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsKQEAgLTEwNzcsNiArMTA3OSw4IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJh
Y2VzKEV4ZWNTdGF0CiAjZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkKEV4ZWNT
dGF0ZSopOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUq
KTsKQEAgLTEzNDksNiArMTM1Myw5IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgIm1heEFyZ3VtZW50cyIsIGZ1bmN0aW9uTWF4QXJndW1lbnRzLCAwKTsKIAorICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgImFzeW5jVGVzdCIsIGZ1bmN0aW9uQXN5bmNUZXN0LCAxKTsKKyAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RQYXNzZWQiLCBmdW5jdGlvbkFzeW5jVGVz
dFBhc3NlZCwgMSk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMiLCBmdW5jdGlvblRlc3RXYXNtTW9kdWxl
RnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAtMTczMiwxMSArMTczOSwxMiBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEZJTEUqIG91dCkKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAotICAgIGlmICh0ZXN0MjYyQXN5bmNUZXN0KSB7CisgICAgaWYgKGFzeW5jVGVz
dEV4cGVjdGVkUGFzc2VzKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVu
dCgwKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkgJiYgV1RGOjplcXVhbChhc1N0cmlu
Zyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRlc3QyNjI6QXN5bmNUZXN0Q29tcGxldGUi
KSkKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Bhc3NlZCA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGlmICh2YWx1ZS5pc1N0
cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCks
ICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpIHsKKyAgICAgICAgICAgIGFzeW5jVGVzdFBh
c3NlcysrOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVj
LT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtMzA0OSw2ICszMDU3LDI1IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7CiB9
CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rlc3QoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBudW1iZXJPZkFzeW5jUGFz
c2VzID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFudW1iZXJPZkFzeW5jUGFzc2VzLmlz
VUludDMyKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYSB1aW50MzIiKSk7CisKKyAgICBh
c3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9IG51bWJlck9mQXN5bmNQYXNzZXMuYXNVSW50MzIoKTsK
KyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQoRXhlY1N0YXRlKikKK3sKKyAgICBh
c3luY1Rlc3RQYXNzZXMrKzsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIHN0YXRpYyBDU3RyaW5nIHZhbHVlV2l0aFR5cGVP
Zldhc21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1
ZSB3YXNtVmFsdWUpCkBAIC0zMTU5LDIxICszMTg2LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRl
KiBlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsgMikK
ICAgICAgICAgQ1JBU0goKTsKIAotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihzb3VyY2UtPnZlY3RvcigpKSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgcGxh
bi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oImZh
aWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBsYW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJlZjxX
YXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oc291cmNlLT52ZWN0b3IoKSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206OlBs
YW46OkZ1bGxDb21waWxlLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBXYXNtOjpl
bnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOworICAgIFdhc206OmVuc3Vy
ZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdldCgpKTsKKyAgICBp
ZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2Ug
bW9kdWxlOiAiLCBwbGFuLT5lcnJvck1lc3NhZ2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAg
fQogCi0gICAgaWYgKHBsYW4uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3Vu
dCkKKyAgICBpZiAocGxhbi0+aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3Vu
dCkKICAgICAgICAgQ1JBU0goKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIga2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5z
aWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxl
ZXMoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXpl
Q2FsbGVlcygKICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2Fs
bGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0gMSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAg
ICAgICBjYWxsZWVzLmFwcGVuZChqc0VudHJ5cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMjA5
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2Fz
bU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXgg
PSBjYWxsZWVJbmRleDsKICAgICAgICAgICAgIH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtl
TW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9u
KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMzY2
Niw3ICszNjk0LDcgQEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLS10
ZXN0MjYyLWFzeW5jIikpIHsKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Rlc3QgPSB0cnVlOwor
ICAgICAgICAgICAgYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMrKzsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTM3MzgsMjMgKzM3NjYsMzQgQEAgaW50IHJ1bkpTQyhDb21t
YW5kTGluZSBvcHRpb25zLCBjb25zdCBGdW5jJiBmdW5jKQogICAgIFdvcmtlciB3b3JrZXIoV29y
a2Vyczo6c2luZ2xldG9uKCkpOwogICAgIAogICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VI
ZWFwKS5sZWFrUmVmKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcigmdm0pOwotCiAgICAgaW50
IHJlc3VsdDsKLSAgICBpZiAob3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcikKLSAgICAgICAgdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxQcm9maWxlcjo6RGF0YWJhc2U+KHZtKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgewor
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKHZtLCBqc051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOwotICAgIGdsb2Jh
bE9iamVjdC0+c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3Rl
RGVidWdnaW5nKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwot
ICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKLSAgICAgICAgcnVuSW50
ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYm
ICF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCisgICAgICAgICAgICB2bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb2ZpbGVyOjpEYXRhYmFzZT4odm0pOwogCi0g
ICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAodGVzdDI2
MkFzeW5jVGVzdCA9PSB0ZXN0MjYyQXN5bmNQYXNzZWQpID8gMCA6IDM7CisgICAgICAgIEdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMp
OworICAgICAgICBnbG9iYWxPYmplY3QtPnNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQob3B0aW9u
cy5tX2VuYWJsZVJlbW90ZURlYnVnZ2luZyk7CisgICAgICAgIHN1Y2Nlc3MgPSBmdW5jKHZtLCBn
bG9iYWxPYmplY3QpOworICAgICAgICBpZiAob3B0aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nl
c3MpCisgICAgICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOworCisgICAgICAg
IHZtLmRyYWluTWljcm90YXNrcygpOworICAgIH0KKyNpZiBVU0UoQ0YpCisgICAgdm0ucHJvbWlz
ZURlZmVycmVkVGltZXItPnJ1blJ1bkxvb3AoKTsKKyNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMu
bV9leGl0Q29kZSkKLSAgICAgICAgcHJpbnRmKCJqc2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsK
KyAgICByZXN1bHQgPSBzdWNjZXNzICYmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9PSBhc3lu
Y1Rlc3RQYXNzZXMpID8gMCA6IDM7CisKKyAgICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKSB7Cisg
ICAgICAgIHByaW50ZigianNjIGV4aXRpbmcgJWQiLCByZXN1bHQpOworICAgICAgICBpZiAoYXN5
bmNUZXN0RXhwZWN0ZWRQYXNzZXMgIT0gYXN5bmNUZXN0UGFzc2VzKQorICAgICAgICAgICAgcHJp
bnRmKCIgYmVjYXVzZSBleHBlY3RlZDogJWQgYXN5bmMgdGVzdCBwYXNzZXMgYnV0IGdvdDogJWQg
YXN5bmMgdGVzdCBwYXNzZXMiLCBhc3luY1Rlc3RFeHBlY3RlZFBhc3NlcywgYXN5bmNUZXN0UGFz
c2VzKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1f
cHJvZmlsZSkgewogICAgICAgICBpZiAoIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+c2F2ZShv
cHRpb25zLm1fcHJvZmlsZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCkBAIC0zNzYyLDI0ICszODAx
LDI4IEBAIGludCBydW5KU0MoQ29tbWFuZExpbmUgb3B0aW9ucywgY29uc3QgRnVuYyYgZnVuYykK
ICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25G
dXp6KCkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAl
dSBjaGVja3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgYm9vbCBm
aXJlQXRFbmFibGVkID0KLSAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFmdGVyKCk7
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmly
ZUF0RW5hYmxlZCB8fCBPcHRpb25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkp
KQotICAgICAgICBwcmludGYoIkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5jb3Vu
dGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVj
a3MoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKLSAgICAgICAgcHJp
bnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIs
IG51bWJlck9mU3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7Ci0gICAgICAgIHByaW50ZigiSlND
IE9TUiBFWElUIEZVWlo6IGVuY291bnRlcmVkICV1IGR5bmFtaWMgY2hlY2tzLlxuIiwgbnVtYmVy
T2ZPU1JFeGl0RnV6ekNoZWNrcygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBpbGVUaW1lU3Rh
dHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGls
ZVRpbWVLZXlzOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQotICAg
ICAgICBjb21waWxlVGltZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgc3RkOjpzb3J0KGNv
bXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOwotICAgIGZvciAo
Q1N0cmluZyBrZXkgOiBjb21waWxlVGltZUtleXMpCi0gICAgICAgIHByaW50ZigiJTQwczogJS4z
bGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VFeGNlcHRpb25GdXp6KCkpCisgICAgICAgICAgICBwcmludGYoIkpTQyBFWENFUFRJT04gRlVa
WjogZW5jb3VudGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tz
KCkpOworICAgICAgICBib29sIGZpcmVBdEVuYWJsZWQgPQorICAgICAgICBPcHRpb25zOjpmaXJl
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6QXRPckFmdGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9z
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVY
RUNVVEFCTEUgQUxMT0NBVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1i
ZXJPZkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElU
IEZVWlo6IGVuY291bnRlcmVkICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09T
UkV4aXRGdXp6Q2hlY2tzKCkpOworICAgICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVa
WjogZW5jb3VudGVyZWQgJXUgZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6
Q2hlY2tzKCkpOworICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29tcGlsZVRp
bWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpOworICAgICAgICBWZWN0b3I8Q1N0cmlu
Zz4gY29tcGlsZVRpbWVLZXlzOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tcGlsZVRp
bWVTdGF0cykKKyAgICAgICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsK
KyAgICAgICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtl
eXMuZW5kKCkpOworICAgICAgICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlzKQor
ICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGls
ZVRpbWVTdGF0cy5nZXQoa2V5KSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6
Z2NBdEVuZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2VEZWZlcnJlZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5jcHAKaW5kZXggNjk2N2UwM2FmZTE1NDI0NGQxZTJkMGNiMDNhNDYxMDg5
NDA1MDFkNS4uMWRhMDYwMWY4OTc4ZTEwZmY4OTNjYTMxZTFiM2U4ZmJkZDI1MmM2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk5
LDExICsxMDAsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIEpTVmFsdWUgdmFsdWUKIHZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNh
bGxGdW5jdGlvbihleGVjLCBtX3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1Bl
bmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJv
bWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0g
bV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlYXNvbikKIHsKICAgICBjYWxsRnVuY3Rp
b24oZXhlYywgbV9yZWplY3QuZ2V0KCksIHJlYXNvbik7CisgICAgYm9vbCB3YXNQZW5kaW5nID0g
ZXhlYy0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhp
cyk7CisgICAgQVNTRVJUX1VOVVNFRCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlz
ZUlzQXN5bmNQZW5kaW5nKTsKIH0KIAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiByZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCAyNmY0YTgyZDA4Y2EwMjIw
ZWRkNTE5Njg1Mjk4MjJiY2FiOWFjNmZkLi4wOTIyYTk0ZDkzM2NjZWM1OWE0YTE3ZmNiZDIyYzM3
MjNkYTUwY2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZURlZmVycmVkLmgKQEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIHByb21pc2VBc3luY1BlbmRpbmcoKSB7IG1fcHJvbWlzZUlzQXN5bmNQ
ZW5kaW5nID0gdHJ1ZTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2VEZWZl
cnJlZChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09i
amVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwpAQCAtNjQsNiArNjgsMTAgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBKU1Byb21pc2VEZWZlcnJlZChWTSYpOwogCisjaWZuZGVmIE5ERUJVRwor
ICAgIGJvb2wgbV9wcm9taXNlSXNBc3luY1BlbmRpbmcgeyBmYWxzZSB9OworI2VuZGlmCisKICAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fcHJvbWlzZTsKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9yZXNvbHZlOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlamVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNjdhOWM3YmVmMzQxZmI5ZjA0MWYzOTVkNTBhYzYxZjQ5NzViNTBhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9v
cFRpbWVyLmgiCisKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoR0xJQikKKyNp
bmNsdWRlIDxnbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0Yp
CisKK2NvbnN0IENGVGltZUludGVydmFsIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICog
NjAgKiAyNCAqIDM2NSAqIDEwOworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0q
IHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKK3sK
KyAgICBzZXRSdW5Mb29wKHZtLT5oZWFwLnJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29w
VGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCit7CisgICAgaWYgKG1fcnVu
TG9vcCkgeworICAgICAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1f
dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgIENGUnVuTG9vcFRp
bWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7
CisgICAgICAgIG1fdGltZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAocnVuTG9vcCkgewor
ICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwg
MCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkpOworICAgICAgICBtX2NvbnRleHQuaW5m
byA9IHRoaXM7CisgICAgICAgIG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHNfZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSlNSdW5Mb29w
VGltZXI6OnRpbWVyRGlkRmlyZSwgJm1fY29udGV4dCkpOworICAgICAgICBDRlJ1bkxvb3BBZGRU
aW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rl
cyk7CisgICAgfQorfQorCitKU1J1bkxvb3BUaW1lcjo6fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAg
ICBzZXRSdW5Mb29wKDApOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUo
Q0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGNvbnRleHRQdHIpCit7CisgICAgSlNSdW5Mb29wVGlt
ZXIqIHRpbWVyID0gc3RhdGljX2Nhc3Q8SlNSdW5Mb29wVGltZXIqPihjb250ZXh0UHRyKTsKKyAg
ICB0aW1lci0+bV9hcGlMb2NrLT5sb2NrKCk7CisKKyAgICBSZWZQdHI8Vk0+IHZtID0gdGltZXIt
Pm1fYXBpTG9jay0+dm0oKTsKKyAgICBpZiAoIXZtKSB7CisgICAgICAgIC8vIFRoZSBWTSBoYXMg
YmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgICAgIHRpbWVy
LT5tX2FwaUxvY2stPnVubG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgewor
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKKyAgICAgICAgdGltZXItPmRv
V29yaygpOworICAgIH0KKworICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOworfQorCit2
b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25k
cykKK3sKKyAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBD
RkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGludGVydmFsSW5TZWNvbmRzKTsKKyAgICBtX2lz
U2NoZWR1bGVkID0gdHJ1ZTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIo
KQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENG
QWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNhZGUpOworICAgIG1faXNTY2hlZHVsZWQg
PSBmYWxzZTsKK30KKworI2VsaWYgVVNFKEdMSUIpCisKK2NvbnN0IGxvbmcgSlNSdW5Mb29wVGlt
ZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CisKK3N0YXRpYyBHU291cmNl
RnVuY3MgSlNSdW5Mb29wVGltZXJTb3VyY2VGdW5jdGlvbnMgPSB7CisgICAgbnVsbHB0ciwgLy8g
cHJlcGFyZQorICAgIG51bGxwdHIsIC8vIGNoZWNrCisgICAgLy8gZGlzcGF0Y2gKKyAgICBbXShH
U291cmNlKiwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9v
bGVhbgorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHVzZXJEYXRhKTsKKyAgICB9LAor
ICAgIG51bGxwdHIsIC8vIGZpbmFsaXplCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxsYmFj
aworICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfbWFyc2hhbGwKK307CisKK0pTUnVuTG9vcFRpbWVy
OjpKU1J1bkxvb3BUaW1lcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9hcGlMb2Nr
KCZ2bS0+YXBpTG9jaygpKQorICAgICwgbV90aW1lcihhZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZK
U1J1bkxvb3BUaW1lclNvdXJjZUZ1bmN0aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkpCit7CisgICAg
Z19zb3VyY2Vfc2V0X25hbWUobV90aW1lci5nZXQoKSwgIltKYXZhU2NyaXB0Q29yZV0gSlNSdW5M
b29wVGltZXIiKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1lci5nZXQoKSwgW10o
Z3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byYgcnVuTG9vcFRp
bWVyID0gKnN0YXRpY19jYXN0PEpTUnVuTG9vcFRpbWVyKj4odXNlckRhdGEpOworICAgICAgICBn
X3NvdXJjZV9zZXRfcmVhZHlfdGltZShydW5Mb29wVGltZXIubV90aW1lci5nZXQoKSwgZ19nZXRf
bW9ub3RvbmljX3RpbWUoKSArIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSAqIEdfVVNFQ19QRVJf
U0VDKTsKKyAgICAgICAgcnVuTG9vcFRpbWVyLnRpbWVyRGlkRmlyZSgpOworICAgICAgICByZXR1
cm4gR19TT1VSQ0VfQ09OVElOVUU7CisgICAgfSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fdGltZXIuZ2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVs
dCgpKTsKK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcigpCit7CisgICAgZ19z
b3VyY2VfZGVzdHJveShtX3RpbWVyLmdldCgpKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6
dGltZXJEaWRGaXJlKCkKK3sKKyAgICBtX2FwaUxvY2stPmxvY2soKTsKKworICAgIGlmICghbV9h
cGlMb2NrLT52bSgpKSB7CisgICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNv
IHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIobV92bSk7CisgICAgICAgIGRvV29yaygpOworICAgIH0KKworICAgIG1fYXBpTG9jay0+dW5s
b2NrKCk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlIGlu
dGVydmFsSW5TZWNvbmRzKQoreworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIu
Z2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBpbnRlcnZhbEluU2Vjb25kcyAqIEdfVVNF
Q19QRVJfU0VDKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKK30KKwordm9pZCBKU1J1bkxv
b3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1f
dGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19Q
RVJfU0VDKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gZmFsc2U7Cit9CisjZWxzZQorSlNSdW5Mb29w
VGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKyAgICA6IG1fdm0odm0pCit7Cit9CisKK0pT
UnVuTG9vcFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworfQorCit2b2lkIEpTUnVuTG9vcFRp
bWVyOjppbnZhbGlkYXRlKCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6c2NoZWR1bGVU
aW1lcihkb3VibGUpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkK
K3sKK30KKyNlbmRpZgorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BUaW1lci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2VjYjljYmM0
M2I4MGQzMWVmOGI2YjA0OWMxN2VmNWFjNGZjYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIuaApAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0Uo
Q0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgor
CisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0xvY2s7CitjbGFzcyBWTTsKKworY2xhc3MgSlNS
dW5Mb29wVGltZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNSdW5Mb29wVGltZXI+
IHsKK3B1YmxpYzoKKyAgICBKU1J1bkxvb3BUaW1lcihWTSopOworI2lmIFVTRShDRikKKyAgICBz
dGF0aWMgdm9pZCB0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKTsKKyNlbmRp
ZgorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNSdW5Mb29wVGltZXIoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAwOworCisgICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRv
dWJsZSBpbnRlcnZhbEluU2Vjb25kcyk7CisgICAgdm9pZCBjYW5jZWxUaW1lcigpOworICAgIGJv
b2wgaXNTY2hlZHVsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2NoZWR1bGVkOyB9CisKKyNpZiBV
U0UoQ0YpCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJl
Zik7CisjZW5kaWYgLy8gVVNFKENGKQorCitwcm90ZWN0ZWQ6CisgICAgVk0qIG1fdm07CisKKyAg
ICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CisgICAgYm9vbCBtX2lzU2NoZWR1bGVkIHsgZmFs
c2UgfTsKKyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHNfZGVj
YWRlOworCisgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOworICAgIFJl
dGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVuTG9vcDsKKworICAgIENGUnVuTG9vcFRpbWVyQ29u
dGV4dCBtX2NvbnRleHQ7CisKKyAgICBMb2NrIG1fc2h1dGRvd25NdXRleDsKKyNlbGlmIFVTRShH
TElCKQorICAgIHN0YXRpYyBjb25zdCBsb25nIHNfZGVjYWRlOworICAgIHZvaWQgdGltZXJEaWRG
aXJlKCk7CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3RpbWVyOworI2VuZGlmCisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgaW52YWxpZGF0ZSgpOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGRhOTk2ZWFhM2M2
Y2NiNjBiZjEwOGI2OTk3Mzg0MjZmNzFhNDk2N2MuLmEwZDkxMDkwZTYyYmNkYjI2NjFjMjg2ZDM0
NDY3MjdjOTE1MTRlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
QEAgLTI1Miw2ICsyNTIsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9m
V29ya2VyVGhyZWFkcyg4LCAyKSAtIDEsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoaW50MzIs
IHByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFP
ZldvcmtlclRocmVhZHMoLTEsIDApLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGludDMyLCBw
cmlvcml0eURlbHRhT2ZGVExDb21waWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZX
b3JrZXJUaHJlYWRzKC0yLCAwKSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihpbnQzMiwgcHJp
b3JpdHlEZWx0YU9mV2FzbUNvbXBpbGVyVGhyZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldv
cmtlclRocmVhZHMoLTEsIDApLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29s
LCB1c2VQcm9maWxlciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZGlz
YXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKQEAg
LTQyOCw2ICs0MjksOSBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2
KGJvb2wsIHVzZUNvZGVDYWNoZSwgdHJ1ZSwgTm9ybWFsLCAiSWYgZmFsc2UsIHRoZSB1bmxpbmtl
ZCBieXRlIGNvZGUgY2FjaGUgd2lsbCBub3QgYmUgdXNlZC4iKSBcCiAgICAgXAogICAgIHYoYm9v
bCwgdXNlV2ViQXNzZW1ibHksIHRydWUsIE5vcm1hbCwgIkV4cG9zZSB0aGUgV2ViQXNzZW1ibHkg
Z2xvYmFsIG9iamVjdC4iKSBcCisgICAgXAorICAgIHYoYm9vbCwgZmFpbFRvQ29tcGlsZVdlYkFz
c2VtYmx5Q29kZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIG5vIFdhc206OlBsYW4gd2lsbCBz
dWNlc3NmdWxseSBjb21waWxlIGEgZnVuY3Rpb24uIikgXAorICAgIFwKICAgICB2KGJvb2wsIHNp
bXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUg
TWVtb3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxsICdtYXhpbXVtJyByYW5nZSBhbmQgaW5z
dGVhZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGFtb3VudC4iKSBcCiAgICAg
dihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksIHRydWUsIE5vcm1hbCwgIklmIHRydWUs
IHdlIHdpbGwgdHJ5IHRvIHVzZSBhIDMyLWJpdCBhZGRyZXNzIHNwYWNlIHdpdGggYSBzaWduYWwg
aGFuZGxlciB0byBib3VuZHMgY2hlY2sgd2FzbSBtZW1vcnkuIikgXAogICAgIHYoYm9vbCwgdXNl
V2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0
byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJl
bnQgcGxhdGZvcm0uIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMjJkMjcyZDQwM2VkNzcwMDk2
YTk0MGY5OGNlNjJhNGQ3OWVmY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCkBAIC0wLDAgKzEsMTM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCisKKyNpbmNsdWRl
ICJKU1Byb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNs
dWRlICJWTS5oIgorCisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQcm9taXNlRGVmZXJyZWRU
aW1lcjo6UHJvbWlzZURlZmVycmVkVGltZXIoVk0mIHZtKQorICAgIDogQmFzZSgmdm0pCit7Cit9
CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yaygpCit7CisgICAgQVNTRVJUKG1f
dm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fdGFza0xvY2spOworICAgIGNhbmNlbFRpbWVyKCk7CisgICAgaWYgKCFtX3J1blRhc2tz
KQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoIW1fdGFza3MuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQ7CisgICAgICAgIFRhc2sgdGFzazsKKyAg
ICAgICAgc3RkOjp0aWUodGlja2V0LCB0YXNrKSA9IG1fdGFza3MudGFrZUxhc3QoKTsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkRvaW5nIHdvcmsgb24gcHJvbWlzZTogIiwgUmF3UG9p
bnRlcih0aWNrZXQpKTsKKworICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbHJlYWR5IGNhbmNlbGVk
IHRoZXNlIHByb21pc2VzLgorICAgICAgICBpZiAobV9wZW5kaW5nUHJvbWlzZXMuY29udGFpbnMo
dGlja2V0KSkgeworICAgICAgICAgICAgdGFzaygpOworICAgICAgICAgICAgbV92bS0+ZHJhaW5N
aWNyb3Rhc2tzKCk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHdhaXRpbmdUYXNrcyA9IG1f
YmxvY2tlZFRhc2tzLnRha2UodGlja2V0KTsKKyAgICAgICAgZm9yIChjb25zdCBUYXNrJiB1bmJs
b2NrZWRUYXNrIDogd2FpdGluZ1Rhc2tzKSB7CisgICAgICAgICAgICB1bmJsb2NrZWRUYXNrKCk7
CisgICAgICAgICAgICBtX3ZtLT5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorICAgIH0K
KworI2lmIFVTRShDRikKKyAgICBpZiAobV9wZW5kaW5nUHJvbWlzZXMuaXNFbXB0eSgpICYmIG1f
c2hvdWxkU3RvcFJ1bkxvb3BXaGVuQWxsUHJvbWlzZXNGaW5pc2gpCisgICAgICAgIENGUnVuTG9v
cFN0b3AobV9ydW5Mb29wLmdldCgpKTsKKyNlbmRpZgorfQorCisjaWYgVVNFKENGKQordm9pZCBQ
cm9taXNlRGVmZXJyZWRUaW1lcjo6cnVuUnVuTG9vcCgpCit7CisgICAgQVNTRVJUKCFtX3ZtLT5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlQoQ0ZSdW5Mb29wR2V0
Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSk7CisgICAgbV9zaG91bGRTdG9wUnVuTG9vcFdo
ZW5BbGxQcm9taXNlc0ZpbmlzaCA9IHRydWU7CisgICAgQ0ZSdW5Mb29wUnVuKCk7Cit9CisjZW5k
aWYKKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6YWRkUGVuZGluZ1Byb21pc2UoSlNQcm9t
aXNlRGVmZXJyZWQqIHRpY2tldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2ll
cykKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5zaXplKCk7ICsraSkK
KyAgICAgICAgQVNTRVJUKGRlcGVuZGVuY2llc1tpXS5nZXQoKSAhPSB0aWNrZXQpOworCisgICAg
YXV0byByZXN1bHQgPSBtX3BlbmRpbmdQcm9taXNlcy5hZGQodGlja2V0LCBWZWN0b3I8U3Ryb25n
PEpTQ2VsbD4+KCkpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiQWRkaW5nIG5ldyBwZW5kaW5nIHByb21pc2U6ICIsIFJhd1BvaW50
ZXIodGlja2V0KSk7CisgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4o
Km1fdm0sIHRpY2tldCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92
ZShkZXBlbmRlbmNpZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJBZGRpbmcgbmV3IGRlcGVuZGVuY2llcyBmb3IgcHJvbWlzZTogIiwgUmF3UG9pbnRlcih0
aWNrZXQpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmRWZWN0b3IoZGVw
ZW5kZW5jaWVzKTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdGlja2V0LT5wcm9taXNl
QXN5bmNQZW5kaW5nKCk7CisjZW5kaWYKK30KKworYm9vbCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6
Y2FuY2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqIHRpY2tldCkKK3sKKyAgICBB
U1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYm9vbCBy
ZXN1bHQgPSBtX3BlbmRpbmdQcm9taXNlcy5yZW1vdmUodGlja2V0KTsKKworICAgIGlmIChyZXN1
bHQpCisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJDYW5jZWxpbmcgcHJvbWlzZTogIiwg
UmF3UG9pbnRlcih0aWNrZXQpKTsKKworICAgIGF1dG8gYmxvY2tlZFRhc2tzID0gbV9ibG9ja2Vk
VGFza3MudGFrZSh0aWNrZXQpOworICAgIGZvciAoY29uc3QgVGFzayYgdGFzayA6IGJsb2NrZWRU
YXNrcykKKyAgICAgICAgdGFzaygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJv
bWlzZURlZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24oSlNQcm9taXNlRGVmZXJyZWQqIHRp
Y2tldCwgVGFzayYmIHRhc2spCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7
CisgICAgbV90YXNrcy5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHRpY2tldCwgV1RGTW92ZSh0YXNr
KSkpOworICAgIGlmICghaXNTY2hlZHVsZWQoKSkKKyAgICAgICAgc2NoZWR1bGVUaW1lcigwKTsK
K30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayhKU1By
b21pc2VEZWZlcnJlZCogYmxvY2tpbmdUaWNrZXQsIFRhc2smJiB0YXNrKQoreworICAgIEFTU0VS
VChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlQobV9w
ZW5kaW5nUHJvbWlzZXMuY29udGFpbnMoYmxvY2tpbmdUaWNrZXQpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fYmxvY2tlZFRhc2tzLmFkZChibG9ja2luZ1RpY2tldCwgVmVjdG9yPFRhc2s+KCkpOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKFdURk1vdmUodGFzaykpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1ZWY3ZTFmMWM3MDdmNDgxNDFh
ZGMyN2U1YzRiOTgxYmU3NjdjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCisjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1Byb21pc2VEZWZlcnJl
ZDsKK2NsYXNzIFZNOworY2xhc3MgSlNDZWxsOworCitjbGFzcyBQcm9taXNlRGVmZXJyZWRUaW1l
ciA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU1J1bkxv
b3BUaW1lciBCYXNlOworCisgICAgUHJvbWlzZURlZmVycmVkVGltZXIoVk0mKTsKKworICAgIHZv
aWQgZG9Xb3JrKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZFBlbmRpbmdQcm9taXNlKEpTUHJv
bWlzZURlZmVycmVkKiwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcyk7Cisg
ICAgLy8gSlNQcm9taXNlRGVmZXJyZWQgc2hvdWxkIGhhbmRsZSBjYW5jZWxpbmcgd2hlbiB0aGUg
cHJvbWlzZSBpcyByZXNvbHZlZCBvciByZWplY3RlZC4KKyAgICBib29sIGNhbmNlbFBlbmRpbmdQ
cm9taXNlKEpTUHJvbWlzZURlZmVycmVkKik7CisKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBUYXNrOworICAgIHZvaWQgc2NoZWR1bGVXb3JrU29vbihKU1Byb21pc2VEZWZlcnJl
ZCosIFRhc2smJik7CisKKyAgICAvLyBCbG9ja2VkIHRhc2tzIHNob3VsZCBvbmx5IGJlIHJlZ2lz
dGVyZWQgd2hpbGUgaG9sZGluZyB0aGUgSlMgQVBJIGxvY2suIElmIHdlIGRpZG4ndCByZXF1aXJl
IGhvbGRpbmcgdGhlCisgICAgLy8gSlMgQVBJIGxvY2sgdGhlbiB0aGVyZSBtaWdodCBiZSBhIHJh
Y2Ugd2hlcmUgdGhlIHByb21pc2UgeW91IGFyZSB3YWl0aW5nIG9uIGlzIHJ1biBiZWZvcmUgeW91
ciB0YXNrIGlzCisgICAgLy8gcmVnaXN0ZXJlZC4KKyAgICB2b2lkIHNjaGVkdWxlQmxvY2tlZFRh
c2soSlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrJiYpOworCisgICAgdm9pZCBzdG9wUnVubmluZ1Rh
c2tzKCkgeyBtX3J1blRhc2tzID0gZmFsc2U7IH0KKyNpZiBVU0UoQ0YpCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBydW5SdW5Mb29wKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBIYXNo
TWFwPEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+Pj4gbV9wZW5kaW5n
UHJvbWlzZXM7CisgICAgTG9jayBtX3Rhc2tMb2NrOworICAgIGJvb2wgbV9ydW5UYXNrcyB7IHRy
dWUgfTsKKyNpZiBVU0UoQ0YpCisgICAgYm9vbCBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFBy
b21pc2VzRmluaXNoIHsgZmFsc2UgfTsKKyNlbmRpZgorICAgIFZlY3RvcjxzdGQ6OnR1cGxlPEpT
UHJvbWlzZURlZmVycmVkKiwgVGFzaz4+IG1fdGFza3M7CisgICAgSGFzaE1hcDxKU1Byb21pc2VE
ZWZlcnJlZCosIFZlY3RvcjxUYXNrPj4gbV9ibG9ja2VkVGFza3M7Cit9OworCisKKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggODUxMTU0
MmI3N2RmYzhlNmYyYmVhYmYxZjg5M2M3NzM5YWI3NGIzOC4uZmVlMGIzMzllZjI1NzJhNWFlZDEx
ZGI4NmExMTE0YzQ0NmExOWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApA
QCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlByb2ZpbGVy
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiUHJv
bWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgog
I2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCkBAIC0x
MDMsNiArMTA0LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUg
IlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCisjaW5jbHVkZSAiV2Fz
bVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKQEAgLTE3Nyw2ICsxNzksNyBAQCBW
TTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBjbGllbnREYXRh
KDApCiAgICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKICAgICAsIHRvcENhbGxGcmFtZShD
YWxsRnJhbWU6Om5vQ2FsbGVyKCkpCisgICAgLCBwcm9taXNlRGVmZXJyZWRUaW1lcihzdGQ6Om1h
a2VfdW5pcXVlPFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykpCiAgICAgLCBtX2F0b21pY1N0
cmluZ1RhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmlu
Z1RhYmxlKCkgOiBuZXcgQXRvbWljU3RyaW5nVGFibGUpCiAgICAgLCBwcm9wZXJ0eU5hbWVzKG51
bGxwdHIpCiAgICAgLCBlbXB0eUxpc3QobmV3IEFyZ0xpc3QpCkBAIC0zNTYsNiArMzU5LDExIEBA
IFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKIAogVk06On5WTSgpCiB7
CisgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkK
KyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7
CisjZW5kaWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hk
b2ctPndpbGxEZXN0cm95Vk0odGhpcyk7CiAgICAgbV90cmFwcy53aWxsRGVzdHJveVZNKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5ZDg2YWExOWE5MzNjZWEzOGFiNWYwMjMx
ODQ0NTljYjYwMTBmM2I3Li44MWI4MmU5OWE5NGRlZGIzYzNhMWM3YzI2MzY5ZjZiYzJmMjA5ODNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwNiw2ICsxMDYsNyBAQCBjbGFz
cyBKU09iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CitjbGFzcyBQcm9taXNlRGVm
ZXJyZWRUaW1lcjsKIGNsYXNzIFJlZ0V4cENhY2hlOwogY2xhc3MgUmVnaXN0ZXI7CiBjbGFzcyBS
ZWdpc3RlckF0T2Zmc2V0TGlzdDsKQEAgLTM4MCw2ICszODEsNyBAQCBwdWJsaWM6CiAgICAgc3Rk
OjpvbmNlX2ZsYWcgbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNlRmxhZzsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb24+IG1fd2FzbVNpZ25hdHVyZUlu
Zm9ybWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VEZWZlcnJlZFRp
bWVyPiBwcm9taXNlRGVmZXJyZWRUaW1lcjsKICAgICAKICAgICBKU0NlbGwqIGN1cnJlbnRseURl
c3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjdXJyZW50bHlE
ZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCBmY2RjOGNkZGM0ZGE2OGRkOWRjZTE5OTBk
OWQ5OTEyZWRkMjlkNjY4Li5iNTQyYjkzMzE2OWIwMjQyOTc4MDdkYmY4ZDRhY2Y3NmY5MTcxMTNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcApAQCAt
MzMsMTAgKzMzLDE3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJv
bWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9k
dWxlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJQcm9taXNl
RGVmZXJyZWRUaW1lci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJX
YXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuaCIKIAordXNpbmcgSlNDOjpXYXNtOjpQbGFuOworCiBuYW1l
c3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpT
V2ViQXNzZW1ibHkpOwpAQCAtNDUsNDUgKzUyLDE2MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSopOwogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVj
U3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMs
IENhdGNoU2NvcGUmIGNhdGNoU2NvcGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlKQorewor
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICBB
U1NFUlQoZXhjZXB0aW9uKTsKKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
cHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
IAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIC8vIEZJ
WE1FOiBNYWtlIHRoaXMgdHJ1bHkgYXN5bmNocm9ub3VzOgotICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTYKLSAgICBKU1ZhbHVlIG1vZHVsZSA9IFdl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBleGVjLT5hcmd1
bWVudCgwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0
cnVjdHVyZSgpKTsKLSAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAg
ICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKLSAgICB9CisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0s
IGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAg
ZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgZ2xvYmFsT2JqZWN0KSk7Cisg
ICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdU
Rk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgUGxhbih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3NvdXJjZSwgcHJvbWlzZSwg
Z2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBw
bGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1l
ci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBwcm9taXNlLCBnbG9iYWxPYmpl
Y3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFZNJiB2
bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxlID0gSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseU1vZHVs
ZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOworICAgICAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMs
IHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CiAKLSAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgICAgICBwcm9t
aXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAg
IFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9CiAKK2VudW0gY2xhc3Mg
UmVzb2x2ZSB7IFdpdGhJbnN0YW5jZSwgV2l0aE1vZHVsZUFuZEluc3RhbmNlIH07CitzdGF0aWMg
dm9pZCByZXNvbHZlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlLCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBl
eGVjKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMs
IHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlbnRy
aWVzID09IFJlc29sdmU6OldpdGhJbnN0YW5jZSkKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShl
eGVjLCBpbnN0YW5jZSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTT2JqZWN0KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoIm1vZHVsZSIpKSwgbW9k
dWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5jZSk7CisgICAgICAgIHBy
b21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGlu
c3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0
LCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29tcGlsaW5n
IGEgbW9kdWxlLiBXZSBmaXJzdCBhbGxvY2F0ZSBpdHMgZ2F0aGVyIGFsbCB0aGUgaW1wb3J0L21l
bW9yeSBpbmZvcm1hdGlvbiBwcmlvciB0bworICAgIC8vIGdlbmVyYXRpbmcgYW55IGNvZGUuIElm
IHdlIGRpZG4ndCBkbyB0aGlzIHdlIG1pZ2h0IGNob29zZSB0byBjb21waWxlIHdpdGggU2lnbmFs
aW5nIG1lbW9yeSBidXQgYWN0dWFsbHkgZ2V0IGEgQm9udWRzIENoZWNraW5nCisgICAgLy8gbWVt
b3J5IHRoZW4gaGF2ZSB0byByZWNvbXBpbGUuCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUs
IGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUlu
c3RhbmNlU3RydWN0dXJlKCkpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAg
ICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEpIFRoZSBp
bnN0YW5jZSBhbHJlYWR5IGhhcyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2ssIHNvIHdlIGhhdmUg
bm8gbW9yZSB3b3JrIHRvIGRvLgorICAgIC8vIDIpIFRoZSBpbnN0YW5jZSBoYXMgbm8gQ29kZUJs
b2NrLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugb25lIGFuZCBjb21waWxlIHRoZSBjb2RlIGZvciBpdC4K
KyAgICAvLyAzKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gdW5pbml0aWFsaXplZCBDb2Rl
QmxvY2ssIHNvIHNvbWVvbmUgZWxzZSBpcyBjb21waWxpbmcgY29kZSBhbmQgd2UganVzdCBuZWVk
IHRvIHdhaXQgZm9yIHRoZW0uCisKKyAgICBpZiAoaW5zdGFuY2UtPmluaXRpYWxpemVkKCkpIHsK
KyAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50
cmllcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U3Ryb25nPEpTQ2Vs
bD4+IGRlcGVuZGVuY2llczsKKyAgICAvLyBUaGUgaW5zdGFuY2Uga2VlcHMgdGhlIG1vZHVsZSBh
bGl2ZS4KKyAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbnN0YW5j
ZSkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9t
aXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAgaWYgKGluc3RhbmNlLT5jb2RlQmxv
Y2soKSkgeworICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVCbG9ja2Vk
VGFzayhpbnN0YW5jZS0+Y29kZUJsb2NrKCktPnBsYW4oKS5wZW5kaW5nUHJvbWlzZSgpLCBbJnZt
LCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzXSAoKSB7CisgICAgICAgICAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAg
ICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXMp
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIWluc3Rh
bmNlLT5jb2RlQmxvY2soKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyByZXBhcnNlcyB0aGUgbW9k
dWxlIGhlYWRlciwgd2hpY2ggc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4KKyAgICBSZWY8UGxhbj4g
cGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbW9kdWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVs
bENvbXBpbGUsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzXSAoUGxhbiYgcCkg
eworICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4t
PnZtKCkucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3By
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXMsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAo
KSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRy
aWVzKTsKKyAgICAgICAgfSk7CisgICAgfSkpOworCisgICAgaW5zdGFuY2UtPmFkZFVuaXRpYWxp
emVkQ29kZUJsb2NrKHZtLCBwbGFuLmNvcHlSZWYoKSk7CisgICAgcGxhbi0+c2V0TW9kZShpbnN0
YW5jZS0+bWVtb3J5TW9kZSgpKTsKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUo
V1RGTW92ZShwbGFuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFs
dWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9
IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBk
ZXBlbmRlbmNpZXM7CisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwg
aW1wb3J0T2JqZWN0KSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQ
cm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4g
cGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwg
W3NvdXJjZSwgcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBt
dXRhYmxlIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAg
ICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21p
c2UsIFtzb3VyY2UsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0g
V1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52
bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
ICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5
TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9k
dWxlU3RydWN0dXJlKCksIFdURk1vdmUoc291cmNlKSwgcGxhbi5jb3B5UmVmKCkpOworICAgICAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4
ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUs
IGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0aE1vZHVsZUFuZEluc3RhbmNlKTsKKyAgICAgICAg
fSk7CisgICAgfSkpOworCisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1v
dmUocGxhbikpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0g
ICAgLy8gRklYTUU6IE1ha2UgdGhpcyBBUEkgdHJ1bHkgYXN5bmNocm9ub3VzOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MTg3Ci0KICAgICBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgYXV0byByZWplY3QgPSBbJl0gKCkgewotICAgICAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgICAg
IEFTU0VSVChleGNlcHRpb24pOwotICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfTsK
LQogICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBK
U09iamVjdCogaW1wb3J0T2JqZWN0ID0gaW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAg
aWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpIHsKQEAg
LTkzLDI5ICsyMTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAgICAgSlNWYWx1ZSBm
aXJzdEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgSlNWYWx1ZSBtb2R1bGU7Ci0g
ICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RBcmd1
bWVudC5pbmhlcml0cyh2bSwgSlNXZWJBc3NlbWJseU1vZHVsZTo6aW5mbygpKSkgewotICAgICAg
ICBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSB0cnVlOwotICAgICAgICBtb2R1bGUgPSBmaXJzdEFy
Z3VtZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBmaXJzdEFyZ3VtZW50LCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgICAg
ICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3Qo
KTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseU1vZHVsZSo+KG1vZHVsZSksIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIGlmIChj
YXRjaFNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gcmVqZWN0KCk7Ci0KLSAgICBp
ZiAoZmlyc3RBcmd1bWVudElzTW9kdWxlKQotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMs
IGluc3RhbmNlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUp
OwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFuY2UiKSksIGluc3RhbmNlKTsKLSAgICAgICAgcHJvbWlz
ZS0+cmVzb2x2ZShleGVjLCByZXN1bHQpOwotICAgIH0KKyAgICBpZiAoYXV0byogbW9kdWxlID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGZpcnN0QXJndW1lbnQpKQor
ICAgICAgICBpbnN0YW50aWF0ZSh2bSwgZXhlYywgcHJvbWlzZSwgbW9kdWxlLCBpbXBvcnRPYmpl
Y3QsIFJlc29sdmU6OldpdGhJbnN0YW5jZSk7CisgICAgZWxzZQorICAgICAgICBjb21waWxlQW5k
SW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2UsIGZpcnN0QXJndW1lbnQsIGltcG9ydE9iamVj
dCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9
CkBAIC0xMjksNyArMjM0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwog
ICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFz
ZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBXYXNtOjpQbGFuIHBsYW4odm0sIGJhc2Ug
KyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFs
aXplKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0
aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCmluZGV4IGZlOGMzZjNiYTIwYTZmZTY4MTVlYjE0NDBhNTdmYmRjMjI5YmZkOWMuLjA4
YWJkYmMwMjFiODE4YzM5NTU5NjE2OWExY2RhMjQ1ZGU5OGU1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
YWxsZWUuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSA8d3RmL0JhZy5oPgpAQCAtMzksMTQgKzQwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
SlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKK25hbWVz
cGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFn
PENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVi
cz4mJiBleGl0U3R1YnMsIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291
bnQpCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNt
OjpQbGFuPiYmIHBsYW4sIHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAgIHsKLSAgICAgICAgYXV0
byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVC
bG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayh2bSwgb3duZXIsIHN0ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2Fs
bExpbmtJbmZvcyksIHN0ZDo6Zm9yd2FyZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4
aXRTdHVicyksIG1vZGUsIGNhbGxlZUNvdW50KTsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwg
YWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwg
b3duZXIsIG1vZGUsIFdURk1vdmUocGxhbiksIGNhbGxlZUNvdW50KTsKICAgICAgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAt
NTksNyArNjQsMTYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQo
KSBjb25zdCB7IHJldHVybiBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CiAgICAgV2FzbTo6TWVt
b3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLSAgICBi
b29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKKworICAgIC8vIERvbid0IGNh
bGwgaW50aWFsaXplIGRpcmVjdGx5LCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgZm9yIHlvdSwgYXMg
bmVlZGVkLCBieSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24uCisgICAg
dm9pZCBpbml0aWFsaXplKCk7CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3BsYW47IH0KKworICAgIFdhc206OlBsYW4mIHBsYW4oKSBjb25zdCB7IEFTU0VSVCghaW5p
dGlhbGl6ZWQoKSk7IHJldHVybiAqbV9wbGFuOyB9CisKKyAgICBib29sIHJ1bm5hYmxlKCkgY29u
c3QgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiAhbV9lcnJvck1lc3NhZ2U7IH0KKyAgICBTdHJp
bmcmIGVycm9yTWVzc2FnZSgpIHsgQVNTRVJUKCFydW5uYWJsZSgpKTsgcmV0dXJuIG1fZXJyb3JN
ZXNzYWdlOyB9CisgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29u
c3Q7CiAKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CkBAIC04
OSwxMCArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBt
X2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CiAgICAgfQogCi0gICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0
d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKLSAgICB9CisgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7IH0KIAogICAgIHZvaWQqIHdhc21U
b0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewpAQCAtMTAx
LDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYm
LCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5TW9kZSwgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiwgV2FzbTo6TWVtb3J5TW9kZSwgUmVmPFdhc206OlBsYW4+JiYsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CkBAIC0xMjUsNiArMTM2LDkgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlv
bmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1f
d2FzbUV4aXRTdHViczsKKyAgICAvLyBUaGUgcGxhbiB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNv
ZGUgYmxvY2suCisgICAgUmVmUHRyPFdhc206OlBsYW4+IG1fcGxhbjsKKyAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtX21vZGU7CiAgICAgdW5zaWduZWQg
bV9jYWxsZWVDb3VudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKaW5kZXggZmFjNTdhZGRhZjA3NGU5YThjZmU2MDYzMzM1ZjMwZGEy
ZTk2ZDNhMi4uYWI3MjAwZWRkNTMwNGZhMmFjYmQ0OTlkODA1ZjNkMWQ5NmExNmNhMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAt
MTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJH
U19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9y
KFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxG
dW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYpOworICAgIEIzSVJHZW5l
cmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRl
cm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9k
ZSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMo
Y29uc3QgU2lnbmF0dXJlKik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMjIxLDYgKzIyMSw3IEBAIHByaXZhdGU6CiAK
ICAgICBWTSYgbV92bTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAg
IE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxv
Y2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAt
MjU4LDkgKzI1OSwxMCBAQCBzdGF0aWMgdm9pZCBzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYg
cHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBhcmcpCiAgICAgICAgIH0pOwogfQogCi1C
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29t
cGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxG
dW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSkKICAgICA6IG1fdm0odm0pCiAg
ICAgLCBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9wcm9jKHByb2Nl
ZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMpCiB7CkBAIC00ODYsNyArNDg4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVy
YXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1faW5mby5t
ZW1vcnkubW9kZSgpID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSB7CisgICAgaWYgKG1f
bW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykgewogICAgICAgICBBU1NFUlQobV9t
ZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+
IG9mZnNldCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0No
ZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6
ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CkBAIC01MjIsNyArNTI0LDcgQEAgaW5saW5lIHVp
bnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQogCiBpbmxpbmUgQjM6OktpbmQgQjNJ
UkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQogewotICAgIGlmICht
X2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCisgICAgaWYgKG1f
bW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgIHJldHVybiB0cmFwcGluZyht
ZW1vcnlPcCk7CiAgICAgcmV0dXJuIG1lbW9yeU9wOwogfQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAg
c3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cGlsYXRpb25Db250ZXh0LCBXYXNtSW4KICAgICBqaXQucmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0
IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBW
ZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2ln
bmF0dXJlSW5kaWNlcywgdW5zaWduZWQgb3B0TGV2ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0s
IENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBm
dW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2ln
bmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25h
dHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGlj
ZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1
bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xMjM2
LDcgKzEyMzgsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sCiAgICAgY29tcGlsYXRpb25Db250
ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCZ2
bSk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4
dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVz
dWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25Q
YXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaAppbmRleCAyNDlkNTc4MTRhOTI4YzRiZjkyMDZiYzg1MjU2NGMzNmM3ODg5
YTRlLi5kZTU2YTFjM2IyM2M1NzA0ZmUwNTMxOWJkMGE4NWMzMWU3N2Y5YTMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1
ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAg
LTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNp
Z25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3YTY3MjlhNzFmYmRmMDUxNzRhMWNjYzExYTU2ZjYyNzFk
Y2ViYy4uNTU2OTQzNWY0MTJlNjZhNmQ3NDhjMzM1OGJiZDE1MzUxY2U1MjI5MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMTAyLDE0ICsxMDIsMTQgQEAgc3Rh
dGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogfQog
CiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBJZGVudGlmaWVyIG1vZHVsZTsKLSAgICBJZGVudGlmaWVy
IGZpZWxkOworICAgIFN0cmluZyBtb2R1bGU7CisgICAgU3RyaW5nIGZpZWxkOwogICAgIEV4dGVy
bmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZl
Y3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKIAogc3RydWN0IEV4cG9ydCB7Ci0g
ICAgSWRlbnRpZmllciBmaWVsZDsKKyAgICBTdHJpbmcgZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5k
IGtpbmQ7CiAgICAgdW5zaWduZWQga2luZEluZGV4OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9m
IHRoZSBjb3JyZXNwb25kaW5nIGtpbmQuCiB9OwpAQCAtMjYwLDYgKzI2MCw3IEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25D
b3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXpl
KCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVy
biBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAogICAgIH5Nb2R1
bGVJbmZvcm1hdGlvbigpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggZjJiOTQxMTVjYjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUz
N2M3M2JhMi4uZDQyMDU2MGI3MjRlNGI0NjU1ZDI2YWFjY2M3ZDRjZTIxYWQ0Y2E3NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTEx
NSw3ICsxMTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJl
c3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJP
ZkxvY2FscyksICJjYW4ndCBnZXQgRnVuY3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGluIGdyb3Vw
ICIsIGkpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG51bWJlck9mTG9jYWxzID09IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAi
LCBpLCAidGggbG9jYWwgZ3JvdXAgY291bnQgaXMgdG9vIGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2Fs
KSwgImNhbid0IGdldCBGdW5jdGlvbiBsb2NhbCdzIHR5cGUgaW4gZ3JvdXAgIiwgaSk7Ci0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwg
bnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgYWRkICIsIG51bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9u
IGxvY2FscyBmcm9tIGdyb3VwICIsIGkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpKTsKICAgICB9CiAKICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQm9keSgpKTsKQEAgLTI2Nyw3ICsyNjcsNyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9w
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3IgZ2V0X2xvY2FsIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSwg
ImNhbid0IGdldF9sb2NhbCBhdCBpbmRleCIsIGluZGV4KTsKKyAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5kZXgsIHJlc3VsdCkpOwogICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0z
MDQsNyArMzA0LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4
Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJz
ZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldEds
b2JhbChpbmRleCwgdmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRHbG9iYWwo
aW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIENh
bGw6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCBkMTNkMGM2
NjJmOTg5ZDNlZGU0ZTRkZTA5ZjIyNDZjYzc5NzY2YTliLi40NGRhMGRmYzE3ODRkZGY1YzAwZDdi
YjU5NDYzMDZhZTYwYTJiMjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eS5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFZNOwogbmFtZXNwYWNlIFdhc20gewogCiAvLyBG
SVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsK
K2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgewogICAgIEJvdW5kc0NoZWNraW5nLAog
ICAgIFNpZ25hbGluZywKICAgICBOdW1iZXJPZk1lbW9yeU1vZGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCA4YWMw
ODY2Mjc4YjUxMzkzYjY2OWVhMDlhN2I1NDhkNmQ5YTc2YjE0Li41OTA5ZmUzZmU4M2MxODgyODky
NTQzNGRlNjU2YWRhYTAxNDE3NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgUGlubmVk
UmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3RlckluZm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3Rl
ckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0KIAotTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9y
bWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1v
cnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KQogICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAg
ICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04
MiwyOCArODIsNiBAQCBNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZt
LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdQogICAgIFJFTEVBU0VfQVNTRVJU
KCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11
bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0aGlzKTsKLQotICAgIGlmICghcmVjb21w
aWxlTW9kZSkgewotICAgICAgICBpZiAoIWlzSW1wb3J0KSB7Ci0gICAgICAgICAgICBpZiAobWF4
aW11bSAmJiBtYXhpbXVtLmJ5dGVzKCkgPT0gMCkgewotICAgICAgICAgICAgICAgIG1fcmVzZXJ2
ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmcpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVz
ZXJ2ZWRNZW1vcnkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRN
ZW1vcnktPm1heGltdW0oKSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNl
cnZlZE1lbW9yeS0+bWF4aW11bSgpLmJ5dGVzKCkgPT0gMCk7Ci0gICAgICAgICAgICAgICAgbV9t
b2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6
Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwotICAg
ICAgICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1vcnkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ISEqbV9yZXNlcnZlZE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZl
ZE1lbW9yeS0+bW9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBtX21vZGUgPSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fbW9kZSA9ICpyZWNvbXBpbGVNb2RlOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA2ZGUwNzBhMTA0NTJmZjZiYjNjNWMyNTA0
MTFmMTBlOTEzODllNGEyLi5kMTgyYzczY2Q2NTM4OGNhZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaApAQCAtNTQsMjIgKzU0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhp
cyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJ
bXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KLSAgICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVz
ZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNlcnZlZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVz
ZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9Ci0gICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJ
bXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1faW5pdGlhbDsgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRN
ZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7IH07CiAgICAgUGFnZUNvdW50IG1fbWF4
aW11bSB7IH07Ci0gICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3
ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1ZmQzZTRjM2QuLmU3MzZiYmYyZjE3MzJhZTI4NDg0NGYz
NGUyOTk4ODMzY2I4Njg1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0xNjIsMTEgKzE2MiwxMSBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIobW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBsZW5ndGgiKTsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4p
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9m
IGxlbmd0aCAiLCBtb2R1bGVMZW4pOwotICAgICAgICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVTdHJpbmcpOworICAgICAgICBpbXAubW9kdWxlID0gbW9k
dWxlU3RyaW5nOwogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVs
ZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIiciKTsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4sICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIGltcC5maWVsZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmll
bGRTdHJpbmcpOworICAgICAgICBpbXAuZmllbGQgPSBmaWVsZFN0cmluZzsKIAogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChpbXAua2luZCksICJjYW4ndCBn
ZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3Mga2luZCBpbiBtb2R1bGUgJyIsIG1vZHVs
ZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBzd2l0Y2gg
KGltcC5raW5kKSB7CkBAIC0zMTYsNyArMzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
TWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQo
aW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGlt
dW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUt
Pm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhp
bXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1l
bW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291
bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0zNzYsNyArMzc2LDcgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmll
bGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5h
bWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZFN0cmluZyksICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwg
ZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIGV4cG9ydE5hbWVzLmFkZChmaWVsZFN0cmluZyk7
Ci0gICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRT
dHJpbmcpOworICAgICAgICBleHAuZmllbGQgPSBmaWVsZFN0cmluZzsKIAogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCksICJjYW4ndCBnZXQg
IiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHAu
a2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5k
IGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggYzk2MThiNTdjYTQyMmYwMWZlOWY3
OWY0YzE3OTUxYTBlYjZiNzUwZS4uNTBhMjg5MzVlZjEzZjk2MjBmYTE1Njg0MTc2YjE3ZTg0ZDY2
YzJiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aApAQCAtNDQsOSArNDQsOSBAQCBzdHJ1Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1v
ZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6
CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIs
IHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKKwor
ICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6
ZV90IHNvdXJjZUxlbmd0aCkKICAgICAgICAgOiBQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291
cmNlTGVuZ3RoKQotICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKICAgICB9CiAKQEAgLTY2
LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7
CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxN
ZW1vcnlNb2RlPiBtX21vZGUgeyBzdGQ6Om51bGxvcHQgfTsKICAgICBib29sIG1faGFzVGFibGUg
eyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmlu
ZGV4IGI2NTQyNDkyNjQ4MTBhZmUwOWExNzA5OTUwNGY1NjMwYmY4NjVjYzYuLmJhMGQ0OGEwZTc1
YzFmMWNlYzkyZTk3NWM0YmNmNTgwMmNmYTUzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTAsMzAgKzQ5LDY1IEBACiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0g
ICAgCi1QbGFuOjpQbGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBs
YW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCkpCisKK1BsYW46OlBsYW4oVk0mIHZt
LCBBcnJheUJ1ZmZlciYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogUGxhbih2bSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlLmRh
dGEoKSksIHNvdXJjZS5ieXRlTGVuZ3RoKCksIHdvcmssIFdURk1vdmUodGFzaykpCit7Cit9CisK
K1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCks
IHNvdXJjZS5zaXplKCksIHdvcmssIFdURk1vdmUodGFzaykpCiB7CiB9CiAKLVBsYW46OlBsYW4o
Vk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCitQbGFu
OjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3Ro
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDogbV92bSh2bSkK
KyAgICAsIG1fY29tcGxldGlvblRhc2sodGFzaykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAg
ICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmsp
Cit7Cit9CisKK2NvbnN0IGNoYXIqIFBsYW46OnN0YXRlU3RyaW5nKFN0YXRlIHN0YXRlKQorewor
ICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpJbml0aWFsOiByZXR1cm4gIklu
aXRpYWwiOworICAgIGNhc2UgU3RhdGU6OlZhbGlkYXRlZDogcmV0dXJuICJWYWxpZGF0ZWQiOwor
ICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOiByZXR1cm4gIlByZXBhcmVkIjsKKyAgICBjYXNlIFN0
YXRlOjpDb21waWxlZDogcmV0dXJuICJDb21waWxlZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxl
dGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgUGxhbjo6bW92ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCit7Cisg
ICAgQVNTRVJUKHN0YXRlID4gbV9zdGF0ZSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIm1v
dmluZyB0byBzdGF0ZTogIiwgc3RhdGVTdHJpbmcoc3RhdGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0
YXRlU3RyaW5nKG1fc3RhdGUpKTsKKyAgICBtX3N0YXRlID0gc3RhdGU7Cit9CisKK3ZvaWQgUGxh
bjo6ZmFpbChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3Nh
Z2UpCiB7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAi
LCBlcnJvck1lc3NhZ2UpOworICAgIG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3Nh
Z2UpOworICAgIGNvbXBsZXRlKGxvY2tlcik7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCitib29s
IFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQogeworICAgIEFTU0VSVChtX3N0YXRlID09
IFN0YXRlOjpJbml0aWFsKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgdmFs
aWRhdGlvbiIpOwogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2ZXJib3Nl
IHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAgICBzdGFydFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVs
ZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIHJlY29tcGlsZU1vZGUpOwor
ICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKCZtX3ZtLCBtX3NvdXJjZSwgbV9zb3Vy
Y2VMZW5ndGgpOwogICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNl
KCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9s
b2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUo
cGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBAIC04Miw1MiArMTE2LDQ4IEBAIGJvb2wgUGxhbjo6cGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1v
ZGUpCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rp
b25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgKytmdW5jdGlvbklu
ZGV4KSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9j
ZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eVtmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQpOworICAgICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kKTsKICAgICAgICAg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CiAgICAgICAgIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAt
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAg
ICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFs
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2ln
bmF0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBh
dXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3Rh
cnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21v
ZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKKyAgICAgICAg
YXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1f
bW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgICAg
ICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyAr
K2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcihyZWludGVycHJldF9j
YXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSksICIsICIpOwogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBt
YWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5k
ZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMg
YW4gRXhwZWN0ZWQuCisgICAgICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJp
bmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBT
dHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhw
ZWN0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAg
ZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWlj
cm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9kdWxlIik7CisgICAgaWYgKG1fYXN5bmNX
b3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwor
ICAgIGVsc2UKKyAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlZhbGlkYXRlZCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLS8vIFdlIGFyZSBjcmVhdGluZyBhIGJ1bmNoIG9mIHRocmVhZHMgdGhh
dCB0b3VjaCB0aGUgbWFpbiB0aHJlYWQncyBzdGFjay4gVGhpcyB3aWxsIG1ha2UgQVNBTiB1bmhh
cHB5LgotLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQg
dGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGludWUgdW50aWwgYWxsIHRocmVhZHMKLS8vIHRo
YXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBkb25lIGV4ZWN1dGluZy4KLVNVUFBSRVNTX0FT
QU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1v
ZGUpCit2b2lkIFBsYW46OnByZXBhcmUoKQogewotICAgIGlmICghcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShyZWNvbXBpbGVNb2RlKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3N0YXRl
ID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGlu
ZyBwcmVwYXJhdGlvbiIpOwogCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5
Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJseUNvbXBpbGVFbmQpOwogCi0gICAgaWYgKHJlY29tcGls
ZU1vZGUpCi0gICAgICAgIEFTU0VSVChtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgp
ID09IHJlY29tcGlsZU1vZGUpOwotCiAgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhp
c10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewogICAg
ICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOwogICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6ZSk7CiAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCh3aGF0KTsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmlu
ZygpOworICAgICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBidWlsZGVyLnRvU3RyaW5n
KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTQ4LDEzMSArMTc4LDE1NCBAQCB2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlv
bmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgICAgIGlmIChpbXBvcnQtPmtpbmQg
IT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsK
LSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3Npbmcg
aW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBv
cnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0LT5maWVsZCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rp
b25JbmRleCwgIjogIiwgaW1wb3J0LT5tb2R1bGUsICI6ICIsIGltcG9ydC0+ZmllbGQpOwogICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnQtPmtpbmRJbmRleCk7Ci0g
ICAgICAgIG1fd2FzbUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3Io
bV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25JbmRl
eCkpOworICAgICAgICBtX3dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGV4aXRTdHViR2Vu
ZXJhdG9yKCZtX3ZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRGdW5j
dGlvbkluZGV4KSk7CiAgICAgfQogCi0gICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIG1vdmVU
b1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7Cit9CiAKLSAgICBhdXRvIGRvV29yayA9IFt0aGlzXSB7
Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OwotICAgICAg
ICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7Ci0gICAgICAgICAgICB9CisvLyBXZSBkb24ndCBo
YXZlIGEgc2VtYXBob3JlIGNsYXNzLi4uIGFuZCB0aGlzIGRvZXMga2luZGEgaW50ZXJlc3Rpbmcg
dGhpbmdzLgorY2xhc3MgUGxhbjo6VGhyZWFkQ291bnRIb2xkZXIgeworcHVibGljOgorICAgIFRo
cmVhZENvdW50SG9sZGVyKFBsYW4mIHBsYW4pCisgICAgICAgIDogbV9wbGFuKHBsYW4pCisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9w
bGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7CisgICAgfQogCi0gICAgICAgICAgICBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgICAgIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAt
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAg
ICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAg
ICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVu
Y3Rpb24obV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1f
bW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25h
dHVyZUluZGljZXMpKTsKLQotICAgICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tm
dW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAg
ICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoKm1fdm0s
IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlv
bkluZGV4XSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBh
cnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVs
dGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgotICAgICAgICAgICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0
LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0
aW9uSW5kZXgpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKTsKKyAgICB+VGhyZWFkQ291bnRIb2xkZXIoKQorICAgIHsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251
bWJlck9mQWN0aXZlVGhyZWFkcy0tOwogCi0gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJt
aW5hdGUgb24gdGhlIG5leHQgZXhlY3V0aW9uLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVh
ZHMpCisgICAgICAgICAgICBtX3BsYW4uY29tcGxldGUobG9ja2VyKTsKKyAgICB9CiAKLSAgICAg
ICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgq
cGFyc2VBbmRDb21waWxlUmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07CisgICAgUGxhbiYgbV9w
bGFuOworfTsKIAotICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwotICAgIGlmICh2ZXJib3Nl
IHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQotICAgICAgICBzdGFydFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKK3ZvaWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucygpCit7Cisg
ICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKKyAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKIAotICAgIHVpbnQzMl90IHRocmVhZENv
dW50ID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3Nv
ckNvcmVzKCkgOiAxOwotICAgIHVpbnQzMl90IG51bVdvcmtlclRocmVhZHMgPSB0aHJlYWRDb3Vu
dCAtIDE7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFk
cy5yZXNlcnZlQ2FwYWNpdHkobnVtV29ya2VyVGhyZWFkcyk7Ci0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgdGhyZWFkcy51bmNoZWNr
ZWRBcHBlbmQoY3JlYXRlVGhyZWFkKCJqc2Mud2FzbS1iMy1jb21waWxhdGlvbi50aHJlYWQiLCBk
b1dvcmspKTsKKyAgICBpZiAobV9zdGF0ZSA+PSBTdGF0ZTo6Q29tcGlsZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVu
dEluZGV4OworICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA9PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAg
ICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBpbGVkKTsKKyAgICAgICAgfQogCi0g
ICAgZG9Xb3JrKCk7IC8vIExldCB0aGUgbWFpbiB0aHJlYWQgZG8gc29tZSB3b3JrIHRvby4KKyAg
ICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhd
LmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0Owor
ICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOworICAgICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlu
dGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1f
dm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
ID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWdu
YXR1cmVJbmRleCk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlv
biwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOwor
CisgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBt
X3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1h
dGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywg
bV9tb2RlKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkp
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiR2V0dGluZyB0aGUgbG9jazogZmFpbCIpOworICAg
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgaWYg
KCFtX2Vycm9yTWVzc2FnZSkgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGNvbXBpbGVz
IGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmly
c3QuCisgICAgICAgICAgICAgICAgZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVt
YmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtV29ya2VyVGhyZWFkczsgaSsrKQotICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW2ldKTsKKyAgICAgICAgbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVS
ZXN1bHQpOworICAgIH0KK30KIAotICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7
IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0
aW9uSW5kZXgrKykgewotICAgICAgICB7Ci0gICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQm
IGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAg
ICAgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7Cit2b2lkIFBsYW46OmNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0
ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnkuc2l6ZSgpKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgQ29tcGxldGlv
biIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7CisgICAgICAgIGZv
ciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9
CisgICAgICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICAgICAgU3RyaW5n
IHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwg
c2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpjb250ZXh0Lndhc21FbnRy
eXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5j
dGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3Zl
KGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCptX3ZtLCAqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2Fz
bUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5j
dGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIobV92bSwgKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNFbnRyeXBv
aW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFsRnVuY3Rp
b25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQor
ICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9u
SW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29u
dGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6
cmVwb3J0Q29tcGlsZVRpbWVzKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25v
dG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksCi0gICAgICAgICAg
ICAiIHVzIHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIG1vZHVsZSIpOwotICAgIH0KKyAgICAgICAg
fQogCi0gICAgLy8gUGF0Y2ggdGhlIGNhbGwgc2l0ZXMgZm9yIGVhY2ggV2ViQXNzZW1ibHkgZnVu
Y3Rpb24uCi0gICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsKLSAgICAgICAgICAg
IHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzOwotICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5j
dGlvbkluZGV4KSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2
ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4g
VGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IGNhbGwudGFyZ2V0ID09IFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw6OlRhcmdldDo6VG9KcworICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxscykgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5s
aW5rZWQpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsKKyAgICAg
ICAgICAgICAgICBpZiAobV9tb2R1bGVJbmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5z
dGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJl
IHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJl
c3MgPSBjYWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMK
ICAgICAgICAgICAgICAgICAgICAgPyBtX3dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbklu
ZGV4KS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKQogICAgICAgICAgICAgICAg
ICAgICA6IG1fd2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXgpLndhc21Ub1dhc20u
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldCAhPSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpU
YXJnZXQ6OlRvSnMpOwotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4IC0gbV93YXNtRXhpdFN0dWJz
LnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoY2FsbC50YXJnZXQgIT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pz
KTsKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXggLSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgp
KS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1dGFibGVB
ZGRyZXNzKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1dGFibGVB
ZGRyZXNzKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2ZhaWxlZCA9IGZhbHNlOworICAg
IGlmIChtX3N0YXRlICE9IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgbW92ZVRvU3RhdGUo
U3RhdGU6OkNvbXBsZXRlZCk7CisgICAgICAgIG1fY29tcGxldGlvblRhc2soKnRoaXMpOworICAg
ICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKKyAgICB9CiB9CiAKLXZvaWQgUGxhbjo6aW5p
dGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc3RkOjpmdW5jdGlv
bjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJBc3NlbWJseUNhbGxl
ZSopPiBjYWxsYmFjaykKK3ZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQogewotICAgIEFT
U0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4
ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6
ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewotICAgICAgICBXYXNtSW50ZXJuYWxGdW5j
dGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9u
SW5kZXhdLmdldCgpOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2lu
dENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCks
IFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNtQ2FsbGVlTW92ZUxvY2F0
aW9uLCBqc0VudHJ5cG9pbnRDYWxsZWUpOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdC0+dm0oKSwgV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92
ZUxvY2F0aW9uLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdhaXQgY29uZGl0aW9uYWxseSBzbyB3ZSBkb24n
dCBoYXZlIHRvIGhvbGQgdGhlIGxvY2sgdG8gY29tcGxldGUgLyBmYWlsLgorICAgICAgICBtX2Nv
bXBsZXRlZC53YWl0KG1fbG9jayk7CisgICAgfQorfQogCi0gICAgICAgIGNhbGxiYWNrKGludGVy
bmFsRnVuY3Rpb25JbmRleCwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxl
ZSk7Cit2b2lkIFBsYW46OmNhbmNlbCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgIG1fY3Vy
cmVudEluZGV4ID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgICAgICBm
YWlsKGxvY2tlciwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBQbGFuIHdhcyBjYW5jZWxlZC4g
SWYgeW91IHNlZSB0aGlzIGVycm9yIG1lc3NhZ2UgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53
ZWJraXQub3JnISIpKTsKICAgICB9CiB9CiAKKwogUGxhbjo6flBsYW4oKSB7IH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmlu
ZGV4IDM1NDRmZDQ4ZGM4ZDkwOTNlZjZiYTgxODRlNDVjNGZlMDA3NjYyZjQuLjdhZmQ2NTBjN2Zh
OTVmNjU3MmZlZDlmZGQ1ODAzN2Y5MDQxZmU2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw2MSArNDAsOTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsTGlu
a0luZm87CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7
CitjbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBQ
bGFuIHsKK2NsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
cHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBWZWN0b3I8dWludDhfdD4p
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
KTsKKyAgICBzdGF0aWMgdm9pZCBkb250RmluYWxpemUoUGxhbiYpIHsgfQorICAgIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkKFBsYW4mKT4gQ29tcGxldGlvblRhc2s7CisgICAgZW51bSBBc3lu
Y1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKKyAgICAvLyBOb3Rl
OiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4g
b3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgUGxhbihWTSYs
IEFycmF5QnVmZmVyJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiwgQXN5bmNXb3JrLCBDb21wbGV0
aW9uVGFzayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6
b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIGJvb2wgcGFyc2VBbmRW
YWxpZGF0ZU1vZHVsZSgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oc3RkOjpv
cHRpb25hbDxNZW1vcnlNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmVwYXJlKCk7CisgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKCk7CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwg
c3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJB
c3NlbWJseUNhbGxlZSopPik7Ci0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQo
KSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQotICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhaWxlZCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYpOwog
CiAgICAgVmVjdG9yPEV4cG9ydD4mIGV4cG9ydHMoKSBjb25zdAogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgp
ICYmICFoYXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhw
b3J0czsKICAgICB9CiAKICAgICBzaXplX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVy
biBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxl
SW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKICAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV9tb2R1bGVJbmZvcm1h
dGlvbik7CiAgICAgfQogCiAgICAgQmFnPENhbGxMaW5rSW5mbz4mJiB0YWtlQ2FsbExpbmtJbmZv
cygpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAgIHJldHVybiBX
VEZNb3ZlKG1fY2FsbExpbmtJbmZvcyk7CiAgICAgfQogCiAgICAgVmVjdG9yPFdhc21FeGl0U3R1
YnM+JiYgdGFrZVdhc21FeGl0U3R1YnMoKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3Jr
KCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21FeGl0U3R1YnMpOwogICAgIH0KIAot
ICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm1lbW9yeS5tb2RlKCk7IH0KKyAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBt
X21vZGU7IH0KKyAgICB2b2lkIHNldE1vZGUoTWVtb3J5TW9kZSBtb2RlKSB7IG1fbW9kZSA9IG1v
ZGU7IH0KKyAgICB2b2lkIHNldFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiBwcm9t
aXNlKSB7IG1fcGVuZGluZ1Byb21pc2UgPSBwcm9taXNlOyB9CisgICAgSlNQcm9taXNlRGVmZXJy
ZWQqIHBlbmRpbmdQcm9taXNlKCkgeyByZXR1cm4gbV9wZW5kaW5nUHJvbWlzZTsgfQorICAgIFZN
JiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KKworICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1
aW50OF90IHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAgICAgVmFsaWRhdGVkLAorICAgICAgICBQ
cmVwYXJlZCwKKyAgICAgICAgQ29tcGlsZWQsCisgICAgICAgIENvbXBsZXRlZCAvLyBXZSBzaG91
bGQgb25seSBtb3ZlIHRvIENvbXBsZXRlZCBpZiB3ZSBhcmUgaG9sZGluZyB0aGUgbG9jay4KKyAg
ICB9OworCisgICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBt
X2Vycm9yTWVzc2FnZTsgfQorCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkg
Y29uc3QgeyByZXR1cm4gIWVycm9yTWVzc2FnZSgpLmlzTnVsbCgpOyB9CisgICAgYm9vbCBoYXNX
b3JrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21waWxlZDsgfQorICAgIGJv
b2wgaGFzQmVlblByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJl
cGFyZWQ7IH0KKworICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICB2b2lkIGNhbmNl
bCgpOwogCiBwcml2YXRlOgorICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOworICAgIGZyaWVu
ZCBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKworICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImKTsKKworICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOworICAgIHZvaWQg
ZmFpbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFN0cmluZyYmIGVycm9yTWVzc2FnZSk7CisKKyAg
ICBjb25zdCBjaGFyKiBzdGF0ZVN0cmluZyhTdGF0ZSk7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgVmVjdG9yPEZ1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeT4gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CiAgICAgVmVj
dG9yPFNpZ25hdHVyZUluZGV4PiBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWdu
YXR1cmVJbmRpY2VzOwpAQCAtMTAzLDE2ICsxMzUsMjQgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRl
eHRzOwogCi0gICAgVk0qIG1fdm07CisgICAgVk0mIG1fdm07CisgICAgSlNQcm9taXNlRGVmZXJy
ZWQqIG1fcGVuZGluZ1Byb21pc2UgeyBudWxscHRyIH07CisgICAgQ29tcGxldGlvblRhc2sgbV9j
b21wbGV0aW9uVGFzazsKKwogICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4+IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CiAgICAgY29uc3QgdWludDhfdCogbV9zb3Vy
Y2U7CiAgICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwotICAgIGJvb2wgbV9mYWlsZWQg
eyB0cnVlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotICAgIHVpbnQzMl90IG1fY3Vy
cmVudEluZGV4OworICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcgfTsKICAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9jb21wbGV0ZWQ7Cisg
ICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpJbml0aWFsIH07CisgICAgY29uc3QgQXN5bmNXb3Jr
IG1fYXN5bmNXb3JrOworICAgIHVpbnQ4X3QgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07
CisgICAgdWludDMyX3QgbV9jdXJyZW50SW5kZXggeyAwIH07CiB9OwogCisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4MjBj
MTIyOTc0MjBhMWRjNjMyZWE5MjM1NjJjMzYwY2RjY2Y0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgUGxhbjo6
aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCit7CisgICAgQVNTRVJU
KCFmYWlsZWQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAw
OyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7
ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7CisgICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9u
KiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRl
eF0uZ2V0KCk7CisKKyAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKG1fdm0sIFdURk1vdmUoZnVuY3Rpb24t
PmpzVG9XYXNtRW50cnlwb2ludCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBqc0VudHJ5cG9pbnRD
YWxsZWUpOworCisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2Fs
bGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKG1fdm0sIFdURk1vdmUoZnVuY3Rpb24t
Pndhc21FbnRyeXBvaW50KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxsZWUp
OworCisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKaW5kZXggNzVkMzgyNmNhZDIxYjM4
OTZlNDFlZWJkYzM3NGZjYWU2NTQ2MTIxNC4uOTIzODU5NGJhOTdmNTNmOTJhYTVkYzIwODQ5NTU2
YWRiODRmYWY4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgYXV0byBWYWxpZGF0ZTo6Y2hlY2tCcmFuY2hUYXJnZXQo
Q29udHJvbFR5cGUmIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHIKICAgICAgICAg
aWYgKHRhcmdldC5zaWduYXR1cmUoKSA9PSBWb2lkKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGV4cHJlc3Npb25TdGFjay5pc0VtcHR5
KCksICJicmFuY2ggdG8gYmxvY2sgb24gZW1wdHkgZXhwcmVzc2lvbiBzdGFjayIpOworICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGV4cHJlc3Npb25TdGFjay5pc0VtcHR5KCksIHRhcmdl
dC50eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCA/ICJicmFuY2ggb3V0IG9mIGZ1bmN0aW9u
IiA6ICJicmFuY2ggdG8gYmxvY2siLCAiIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2ssIGJ1dCBl
eHBlY3RlZCAiLCB0YXJnZXQuc2lnbmF0dXJlKCkpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKHRhcmdldC5zaWduYXR1cmUoKSAhPSBleHByZXNzaW9uU3RhY2subGFzdCgpLCAiYnJh
bmNoJ3Mgc3RhY2sgdHlwZSBkb2Vzbid0IG1hdGNoIGJsb2NrJ3MgdHlwZSIpOwogCiAgICAgICAg
IHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
V29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNjNjZGJiZjljMmViNDRjNDUyOGNhMzdiMWQ3NWUzM2JmYjg4NjgxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0Lmgi
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtUGxhbi5oIgorCisj
aW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitjb25zdCBj
aGFyKiBXb3JrbGlzdDo6cHJpb3JpdHlTdHJpbmcoUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAg
c3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOiByZXR1
cm4gIlByZXBhcmF0aW9uIjsKKyAgICBjYXNlIFByaW9yaXR5OjpTaHV0ZG93bjogcmV0dXJuICJT
aHV0ZG93biI7CisgICAgY2FzZSBQcmlvcml0eTo6Q29tcGlsYXRpb246IHJldHVybiAiQ29tcGls
YXRpb24iOworICAgIGNhc2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOiByZXR1cm4gIlN5bmNocm9u
b3VzIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY2xh
c3MgV29ya2xpc3Q6OlRocmVhZCBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgeworcHVi
bGljOgorICAgIHR5cGVkZWYgQXV0b21hdGljVGhyZWFkIEJhc2U7CisgICAgVGhyZWFkKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrKQorICAgICAgICA6IEJhc2Uo
bG9ja2VyLCB3b3JrLm1fbG9jaywgd29yay5tX3BsYW5FbnF1ZXVlZCkKKyAgICAgICAgLCB3b3Jr
bGlzdCh3b3JrKQorICAgIHsKKworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgYXR0ZW1w
dFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFuKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHF1ZXVlID0gd29ya2xpc3QubV9xdWV1ZTsKKworICAgICAgICBpZiAocXVl
dWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocXVldWUudG9w
KCkucGxhbiA9PSBlbGVtZW50LnBsYW4pCisgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICB9
CisKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gd29ya2xpc3QubV9xdWV1ZTsKKyAg
ICAgICAgc3luY2hyb25pemUubm90aWZ5QWxsKCk7CisKKyAgICAgICAgd2hpbGUgKCFxdWV1ZS5l
bXB0eSgpKSB7CisKKyAgICAgICAgICAgIFByaW9yaXR5IHByaW9yaXR5ID0gcXVldWUudG9wKCku
cHJpb3JpdHk7CisgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29ya2xpc3Q6OlByaW9yaXR5
OjpTaHV0ZG93bikKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKKwor
ICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAgICAgICAgLy8gT25seSBv
bmUgdGhyZWFkIHNob3VsZCB2YWxpZGF0ZS9wcmVwYXJlLgorICAgICAgICAgICAgaWYgKCFxdWV1
ZS50b3AoKS5wbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkKKyAgICAgICAgICAgICAgICBxdWV1ZS5w
b3AoKTsKKworICAgICAgICAgICAgaWYgKGVsZW1lbnQucGxhbi0+aGFzV29yaygpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOworCisgICAgICAgICAgICAvLyBUaGVy
ZSBtdXN0IGJlIGEgYW5vdGhlciB0aHJlYWQgbGlua2luZyB0aGlzIHBsYW4gc28gd2UgY2FuIGRl
cXVlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBsYW5zLgorICAgICAgICAgICAgYXR0ZW1w
dFRvUmVtb3ZlQ29tcGlsYXRpb25QbGFuKGxvY2tlcik7CisgICAgICAgICAgICBlbGVtZW50ID0g
UXVldWVFbGVtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldh
aXQ7CisgICAgfQorCisgICAgV29ya1Jlc3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGF1dG8gY29tcGxldGUgPSBbJl0gKCkgeworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVl
RWxlbWVudCgpOworICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAg
ICAgICB9OworCisgICAgICAgIFBsYW4qIHBsYW4gPSBlbGVtZW50LnBsYW4uZ2V0KCk7CisgICAg
ICAgIEFTU0VSVChwbGFuKTsKKyAgICAgICAgaWYgKCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkg
eworICAgICAgICAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworICAgICAgICAg
ICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRl
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHBsYW4tPnByZXBhcmUoKTsKKworICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CisgICAgICAgICAgICBl
bGVtZW50Lm5leHRQcmlvcml0eSgpOworICAgICAgICAgICAgd29ya2xpc3QubV9xdWV1ZS5wdXNo
KGVsZW1lbnQpOworICAgICAgICAgICAgd29ya2xpc3QubV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFs
bChsb2NrZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGNo
ZWNrIGluIGF0IHNvbWUgb2NjYXNpb25hbGx5IHRvIHNlZSBpZiB0aGVyZSBhcmUgbmV3LCBoaWdo
ZXIgcHJpb3JpdHkgZS5nLiBzeW5jaHJvbm91cywgcGxhbnMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4K
KyAgICAgICAgcGxhbi0+Y29tcGlsZUZ1bmN0aW9ucygpOworICAgICAgICBBU1NFUlQoIXBsYW4t
Pmhhc1dvcmsoKSk7CisgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9uUGxhbihob2xk
TG9jaygqd29ya2xpc3QubV9sb2NrKSk7CisgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAg
IH0KKworcHVibGljOgorICAgIENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICBXb3JrbGlzdCYg
d29ya2xpc3Q7CisgICAgLy8gV2UgY2FuIG9ubHkgbW9kaWZ5IGVsZW1lbnQgd2hlbiBob2xkaW5n
IHRoZSBsb2NrLiBBIHN5bmNocm9ub3VzIGNvbXBpbGUgbWlnaHQgbG9vayBhdCBlYWNoIHRocmVh
ZCdzIHRhc2tzIGluIG9yZGVyIHRvIGJvb3N0IHRoZSBwcmlvcml0eS4KKyAgICBRdWV1ZUVsZW1l
bnQgZWxlbWVudDsKK307CisKK3ZvaWQgV29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9y
aXR5KCkKK3sKKyAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CisgICAgY2FzZSBQcmlvcml0eTo6UHJl
cGFyYXRpb246CisgICAgICAgIHByaW9yaXR5ID0gUHJpb3JpdHk6OkNvbXBpbGF0aW9uOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcmlvcml0eTo6U3luY2hyb25vdXM6CisgICAgICAgIHJl
dHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWZQdHI8
UGxhbj4gcGxhbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKworICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgYSBwcm9taXNlIGl0IG11c3QgYmUgc3luY2hyb25vdXMgc28gd2Ug
c2hvdWxkIGJvb3N0IHRoZSBwcmlvcml0eS4KKyAgICBQcmlvcml0eSBwcmlvcml0eSA9IHBsYW4t
PnBlbmRpbmdQcm9taXNlKCkgPyBQcmlvcml0eTo6UHJlcGFyYXRpb24gOiBQcmlvcml0eTo6U3lu
Y2hyb25vdXM7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkVucXVldWluZyBwbGFuIHdpdGgg
cHJpb3JpdHk6ICIsIHByaW9yaXR5U3RyaW5nKHByaW9yaXR5KSk7CisgICAgbV9xdWV1ZS5wdXNo
KHsgcHJpb3JpdHksIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7CisgICAgbV9wbGFu
RW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOworfQorCit2b2lkIFdvcmtsaXN0Ojpjb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCit7CisgICAgeworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgLy8gc3RkOjpwcmlvcml0eV9xdWV1ZSBkb2Vz
IG5vdCBoYXZlIGFuIGl0ZXJhdG9yIG9yIGRlY3JlYXNlX2tleS4uLiA6KCBXaGlsZSB0aGlzIGlz
IGdyb3NzLCB0aGlzIGZ1bmN0aW9uCisgICAgICAgIC8vIHNob3VsZG4ndCBiZSBjYWxsZWQgdmVy
eSBvZnRlbiBhbmQgdGhlIHF1ZXVlIHNob3VsZCBiZSBzbWFsbC4KKyAgICAgICAgLy8gRklYTUU6
IHdlIHNob3VsZCBoYXZlIG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4K
KyAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgUXVldWVFbGVtZW50PiBlbGVtZW50czsKKyAgICAg
ICAgd2hpbGUgKCFtX3F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChtX3F1ZXVlLnRv
cCgpLnBsYW4gPT0gJnBsYW4pIHsKKyAgICAgICAgICAgICAgICBRdWV1ZUVsZW1lbnQgdGFyZ2V0
ID0gbV9xdWV1ZS50b3AoKTsKKyAgICAgICAgICAgICAgICBtX3F1ZXVlLnBvcCgpOworCisgICAg
ICAgICAgICAgICAgdGFyZ2V0LnByaW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAg
ICAgICAgICAgICAgIG1fcXVldWUucHVzaCh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKG1fcXVldWUu
dG9wKCkpOworICAgICAgICAgICAgbV9xdWV1ZS5wb3AoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMpCisgICAgICAgICAgICBtX3F1ZXVlLnB1c2go
ZWxlbWVudCk7CisKKyAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKKyAg
ICAgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbiA9PSAmcGxhbikKKyAgICAgICAgICAg
ICAgICB0aHJlYWQtPmVsZW1lbnQucHJpb3JpdHkgPSBQcmlvcml0eTo6U3luY2hyb25vdXM7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBwbGFuLndhaXRGb3JDb21wbGV0aW9uKCk7Cit9CisKK3Zv
aWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKK3sKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcigqbV9sb2NrKTsKKyAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhh
dmUgYW4gaXRlcmF0b3IuLi4gOiggV2hpbGUgdGhpcyBpcyBncm9zcywgdGhpcyBmdW5jdGlvbgor
ICAgIC8vIHNob3VsZG4ndCBiZSBjYWxsZWQgdmVyeSBvZnRlbiBhbmQgdGhlIHF1ZXVlIHNob3Vs
ZCBiZSBzbWFsbC4KKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgb3VyIG93biBQcmlvcml0
eVF1ZXVlIHRoYXQgZG9lc24ndCBzdWNrLgorICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFF1ZXVlRWxl
bWVudD4gZWxlbWVudHM7CisgICAgd2hpbGUgKCFtX3F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAg
aWYgKCZtX3F1ZXVlLnRvcCgpLnBsYW4tPnZtKCkgPT0gJnZtKSB7CisgICAgICAgICAgICBtX3F1
ZXVlLnRvcCgpLnBsYW4tPmNhbmNlbCgpOworICAgICAgICAgICAgbV9xdWV1ZS5wb3AoKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnRzLnB1c2hfYmFj
ayhtX3F1ZXVlLnRvcCgpKTsKKyAgICAgICAgbV9xdWV1ZS5wb3AoKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8gZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAgICBtX3F1ZXVlLnB1c2goZWxlbWVu
dCk7CisKKyAgICBmb3IgKGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgeworICAgICAgICBpZiAo
dGhyZWFkLT5lbGVtZW50LnBsYW4gJiYgJnRocmVhZC0+ZWxlbWVudC5wbGFuLT52bSgpID09ICZ2
bSkgeworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVh
ZGxvY2tpbmcgc2luY2UgdGhlIHRocmVhZCBjYW4ndCBibG9jayB3aXRob3V0IGNsZWFyaW5nIHRo
ZSBwbGFuIGFuZCBtdXN0IGhvbGQgdGhlIGxvY2sgdG8gZG8gc28uCisgICAgICAgICAgICB0aHJl
YWQtPmVsZW1lbnQucGxhbi0+Y2FuY2VsKCk7CisgICAgICAgICAgICB0aHJlYWQtPnN5bmNocm9u
aXplLndhaXQoKm1fbG9jayk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dvcmtsaXN0OjpXb3Jr
bGlzdCgpCisgICAgOiBtX2xvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKKyAgICAsIG1fcGxhbkVu
cXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCit7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMgPSBPcHRpb25zOjp1c2VDb25jdXJyZW50SklU
KCkgPyBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA6IDE7CisgICAgbV90aHJlYWRzLnJl
c2VydmVDYXBhY2l0eShudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkcyk7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
Q29tcGlsYXRpb25UaHJlYWRzOyBpKyspCisgICAgICAgIG1fdGhyZWFkcy51bmNoZWNrZWRBcHBl
bmQoc3RkOjptYWtlX3VuaXF1ZTxXb3JrbGlzdDo6VGhyZWFkPihsb2NrZXIsICp0aGlzKSk7Cit9
CisKK1dvcmtsaXN0Ojp+V29ya2xpc3QoKQoreworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoKm1fbG9jayk7CisgICAgICAgIG1fcXVldWUucHVzaCh7IFByaW9yaXR5OjpTaHV0ZG93
biwgbmV4dFRpY2tldCgpLCBudWxscHRyIH0pOworICAgICAgICBtX3BsYW5FbnF1ZXVlZC0+bm90
aWZ5QWxsKGxvY2tlcik7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Ro
cmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdGhyZWFkc1tpXS0+am9pbigpOworfQorCitz
dGF0aWMgV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0OworCitXb3JrbGlzdCogZXhpc3RpbmdXb3Jr
bGlzdE9yTnVsbCgpIHsgcmV0dXJuIGdsb2JhbFdvcmtsaXN0OyB9CitXb3JrbGlzdCYgZW5zdXJl
V29ya2xpc3QoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplV29ya2xp
c3Q7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVdvcmtsaXN0LCBbXSB7CisgICAgICAg
IGdsb2JhbFdvcmtsaXN0ID0gbmV3IFdvcmtsaXN0KCk7CisgICAgfSk7CisgICAgcmV0dXJuICpn
bG9iYWxXb3JrbGlzdDsKK30KKworCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViMzkyNmQyYTg1NmJmOGUzYTRmMGViYTU3MmFlMGJh
ZThmMzQ3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1ZGUgPHF1ZXVlPgorCisjaW5jbHVkZSA8
d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTUHJvbWlzZURlZmVycmVkOworCituYW1lc3BhY2UgV2FzbSB7
CisKK2NsYXNzIFBsYW47CisKK2NsYXNzIFdvcmtsaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXb3JrbGlzdCgpOworICAgIH5Xb3JrbGlzdCgpOworCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1ZXVlKFJlZlB0cjxQbGFuPik7CisgICAgdm9p
ZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
b21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mKTsKKworICAgIHZvaWQgYWN0aXZhdGVQbGFu
KEpTUHJvbWlzZURlZmVycmVkKiwgUGxhbiopOworICAgIHZvaWQgZGVhY3RpdmVQbGFuKEpTUHJv
bWlzZURlZmVycmVkKiwgUGxhbiopOworCitwcml2YXRlOgorICAgIGNsYXNzIFRocmVhZDsKKyAg
ICBmcmllbmQgY2xhc3MgVGhyZWFkOworCisgICAgdHlwZWRlZiB1bnNpZ25lZCBUaWNrZXQ7Cisg
ICAgVGlja2V0IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RHcmFudGVkVGlja2V0Kys7IH0K
KworICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgeworICAgICAgICBTaHV0ZG93biwKKyAgICAgICAg
U3luY2hyb25vdXMsCisgICAgICAgIENvbXBpbGF0aW9uLAorICAgICAgICBQcmVwYXJhdGlvbgor
ICAgIH07CisgICAgY29uc3QgY2hhciogcHJpb3JpdHlTdHJpbmcoUHJpb3JpdHkpOworCisgICAg
c3RydWN0IFF1ZXVlRWxlbWVudCB7CisgICAgICAgIFByaW9yaXR5IHByaW9yaXR5OworICAgICAg
ICBUaWNrZXQgdGlja2V0OworICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKworICAgICAgICB2
b2lkIG5leHRQcmlvcml0eSgpOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29tcGFyYXRvciB7Cisg
ICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBRdWV1ZUVsZW1lbnQmIGxlZnQsIGNvbnN0IFF1
ZXVlRWxlbWVudCYgcmlnaHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsZWZ0
LnByaW9yaXR5ID09IHJpZ2h0LnByaW9yaXR5KQorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0
LnRpY2tldCA+IHJpZ2h0LnRpY2tldDsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0LnByaW9yaXR5
ID4gcmlnaHQucHJpb3JpdHk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgQm94PExvY2s+IG1f
bG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVl
ZDsKKyAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxvdyBidXQgdGhhdCdzIHVu
bGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBpbGUgdGhpbmdzIG9mIHRo
ZSBzYW1lCisgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVyLCB3aGljaCBpc24ndCB3
cm9uZywganVzdCBzdWJvcHRpbWFsLgorICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsg
MCB9OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpWZWN0b3IgYnV0IFdURjo6
VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVyYXRvci4KKyAgICBzdGQ6
OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8UXVldWVFbGVtZW50Piwg
Q29tcGFyYXRvcj4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwgUGxh
bio+IG1fYWN0aXZlUGxhbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+PiBt
X3RocmVhZHM7Cit9OworCitXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpOworSlNf
RVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgKaW5k
ZXggYjg3NzdkYTBkNGQ3YTEzMGY0MjI0ZWQ0NWZjY2MyZDE5YzFmMjdjNi4uYThhM2RjYTNkMDlm
NWRkMzlkYTZiOWE4Zjk5NWRjODUwODk4N2FjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaApAQCAtNjAsOCArNjAsOCBAQCBw
dWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7
IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIAogcHJpdmF0ZToK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlwb2ludCYmKTsKLSAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwogCiAgICAgV2FzbTo6RW50cnlwb2ludCBtX2Vu
dHJ5cG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmZjg3MTE2ODE5YTMyMjQzOWU4MWNi
ZDA0NjQ3MmEyNmYyMTgzZDhiLi5lYjk2MDczYjY5OThiMDJhMjA3NGFiMTVkZjc3NDY3NjJkNmZi
NTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMjksMzEgKzI5LDY3IEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0ciwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9OwogCi1KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9y
PFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2FzbTo6TWVtb3J5TW9kZSBt
b2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgIFdh
c206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxhbiwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQot
ICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisgICAgLCBtX3Bs
YW4oV1RGTW92ZShwbGFuKSkKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9jYWxsZWVDb3Vu
dChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG93bmVyKTsKKyAg
ICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxvY2sobW9kZSkpOworICAgIG1vZHVsZSgpLT5tX2Nv
ZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCB0aGlzKTsK
KwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCit2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpbml0aWFsaXplZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBwbGFuKCkudm0oKTsKKyAgICBBU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXBs
YW4oKS5oYXNXb3JrKCkpOworCisgICAgaWYgKHBsYW4oKS5mYWlsZWQoKSkgeworICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IHBsYW4oKS5lcnJvck1lc3NhZ2UoKTsKKyAgICAgICAgbV9wbGFuID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKHBs
YW4oKS5tb2RlKCkgPT0gbW9kZSgpKTsKKyAgICBBU1NFUlQocGxhbigpLmludGVybmFsRnVuY3Rp
b25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworCisgICAgbV9jYWxsTGlua0luZm9zID0gcGxh
bigpLnRha2VDYWxsTGlua0luZm9zKCk7CisgICAgbV93YXNtRXhpdFN0dWJzID0gcGxhbigpLnRh
a2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuKCkuaW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1
bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAg
ICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxs
ZWUpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdh
c21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9KTsKKworICAgIG1fcGxhbiA9IG51bGxwdHI7Cit9
CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwogfQogCi1ib29sIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1l
bW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3Nl
bWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAgIGlmICghcnVubmFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2FzbTo6TWVtb3J5TW9kZSBjb2RlTW9kZSA9IG1vZGUo
KTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUgPSBtZW1vcnktPm1lbW9yeSgpLm1v
ZGUoKTsKICAgICBzd2l0Y2ggKGNvZGVNb2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAppbmRleCBmMDMzMTBlYTVlMjA2
MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li41NzhhNjlmNDk4MTVhODI1MjNjMTEyOTQ4ZmJk
OGVhMDkwMzVmMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTczLDYgKzczLDIyIEBAIEFMV0FZU19JTkxJTkUg
dWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVmZmVyVmlldyA/IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihh
cnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQogCitBTFdBWVNfSU5MSU5FIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBieXRlT2Zmc2V0OworICAgIHNpemVfdCBieXRl
U2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCB2
YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBpZiAoYnVmZmVyKQorICAg
ICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKFZNJiB2bSwg
SlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiomIHdhc21GdW5jdGlvbiwgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNtV3JhcHBlckZ1bmN0aW9uKQogewogICAgIGlm
IChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjppbmZvKCkpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcAppbmRleCAxYzExYjBjYTY1YzkxNzQyZjhlNDgxM2MyNGQ5NzVmNjVlZWJhYTE4
Li45MWRhMzllMjU3ZTE0MzEzYjM1MzRmNjNlZmRhNTY1MjI5ODA0NThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAKQEAgLTMyLDMxICszMiwxNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQotewotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBXZSBjcmVhdGUgc3R1YiBt
ZW1vcmllcyBldmVuIGZvciBtb2R1bGVzIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ2V0IGEgbWVt
b3J5IHNvIHdlIHdhbnQgdG8gYXZvaWQgcmVjb21wbGluZyB0aGVyZS4KLSAgICBpZiAobWVtb3J5
LT5tZW1vcnkoKSkgewotICAgICAgICBhdXRvIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5tb2R1
bGUoKS0+Y29kZUJsb2NrKHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCk7Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKLSAgICB9Ci0gICAgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOwotfQotCi1K
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKLXsKLSAgICAvLyBG
SVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8g
dGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
c2l6ZSgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgc3RydWN0dXJlLCBtb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSk7
Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBtb2R1bGUsIG1vZHVsZU5hbWVzcGFj
ZU9iamVjdCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQorY29uc3QgQ2xhc3NJbmZvIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkg
fTsKIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ewpAQCAtNzUsMTEgKzYwLDExIEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAor
ICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKICAgICBjb25zdCBzaXplX3QgZXh0
cmFNZW1vcnlTaXplID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgp
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWludDY0X3Q+
OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKLSAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRo
aXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LnNl
dCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1lc3BhY2VPYmpl
Y3QsIE5vbmUpOwogfQpAQCAtOTUsMTYgKzgwLDI3NyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVs
ZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1v
cnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1vZHVsZSgpLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoKnRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2soVk0mIHZtLCBSZWY8
V2FzbTo6UGxhbj4gcGxhbikKK3sKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjpjcmVhdGUodm0sIG1vZHVsZSgpLCBtZW1vcnlNb2RlKCksIFdURk1vdmUocGxh
biksIG1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmludGVybmFsRnVuY3Rpb25Db3VudCgp
KTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgQVNTRVJU
KCFjb2RlQmxvY2stPmluaXRpYWxpemVkKCkpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgY29kZUJsb2NrKCktPmlu
aXRpYWxpemUoKTsKKworICAgIGlmICghY29kZUJsb2NrKCktPnJ1bm5hYmxlKCkpIHsKKyAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNy
ZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0
dXJlKCksIGNvZGVCbG9jaygpLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bihtZW1vcnko
KSkpOworCisgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29yZCgpKTsKKyAgICBt
b2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsICk7CisKKyAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVj
b3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7Cit9CisKK0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBT
dHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKKworICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworCisg
ICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgeworICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH07CisKKyAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBu
b3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJv
ciBpcyB0aHJvd24uCisgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYm
ICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBiZWNh
dXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxl
IHJlcXVpcmVzIGltcG9ydHMiKSkpOworCisgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldl
YkFzc2VtYmx5SW5zdGFuY2UiKSk7CisgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVs
ZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBt
b2R1bGVJbmZvcm1hdGlvbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKKworICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2Ug
PSBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKKyAgICAvLyBGSVhNRTog
VGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhyb3cg
T09NIGhlcmUuCisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uo
dm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNv
dW50KCkpOworICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVs
ZU5hbWVzcGFjZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKKworICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHkt
ZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5N
ZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5
LgorICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVy
bmFsIHZhbHVlcy4KKyAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOworICAgIHVu
c2lnbmVkIG51bUltcG9ydEdsb2JhbHMgPSAwOworCisgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQg
PSBmYWxzZTsKKyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7CisgICAgLy8gRm9yIGVh
Y2ggaW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CisgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CisgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSBy
ZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9u
YW1lKS4KKyAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBpbXBvcnQubW9kdWxlKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAg
IC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAg
ICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11
c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKKworICAgICAgICAvLyAzLiBMZXQgdiBiZSB0aGUg
dmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgaW1wb3J0LmZpZWxkKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgeworICAgICAg
ICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIC8vIDQu
IElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxh
YmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7CisKKyAgICAgICAgICAgIEpT
T2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKKyAgICAgICAgICAg
IC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CisgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CisgICAgICAgICAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKKyAgICAgICAg
ICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0
aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAgICAgICAgICAgIC8vIGEuIElmIHRo
ZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKHdhc21G
dW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdh
c21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVu
Y3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBj
bG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0g
d2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9
IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQu
a2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAh
PSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlk
ZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6CisgICAgICAgICAgICAvLyBhLiBMZXQgY2xv
c3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2gg
Y2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBh
cmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5
IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlOiBk
b25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KKyAgICAgICAgICAgIC8vIGl2LiBBcHBl
bmQgdiB0byBmdW5jcy4KKyAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRv
IHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3Zl
ICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxv
dyAodGhlIEpTRnVuY3Rpb24pLgorCisgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rp
b25zID09IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAgICAgaW5zdGFuY2UtPmltcG9ydEZ1
bmN0aW9ucygpW251bUltcG9ydEZ1bmN0aW9ucysrXS5zZXQodm0sIGluc3RhbmNlLCBmdW5jdGlv
bik7CisgICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAv
LyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgorICAg
ICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKKyAgICAgICAg
ICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7
CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVj
dCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIXRhYmxl
KQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKKworICAgICAgICAgICAgdWludDMyX3Qg
ZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0
aWFsKCk7CisgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUo
KTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQorICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRp
YWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAg
aWYgKCFhY3R1YWxNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFi
bGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWly
ZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0g
PiAqZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiSW1w
b3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVj
dGVkICdtYXhpbXVtJyIpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlpLiBB
cHBlbmQgdiB0byB0YWJsZXMuCisgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbVGFibGVd
XSB0byBpbXBvcnRzLgorICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0
YW5jZSwgdGFibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogeworICAgICAgICAgICAgLy8gNi4gSWYgaSBp
cyBhIG1lbW9yeSBpbXBvcnQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5
SW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFp
bHVyZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eSk7CisgICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVt
b3J5Kj4odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNz
ZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAg
ICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5
IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKKwor
ICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7CisgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0
dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOworICAgICAgICAgICAgaWYg
KGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNt
YWxsIikpKTsKKworICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGlt
dW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7CisgICAgICAgICAgICAg
ICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGlt
dW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVt
JyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworCisgICAgICAgICAg
ICAgICAgaWYgKGFjdHVhbE1heGltdW0gPiBleHBlY3RlZE1heGltdW0pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRo
YW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KKyAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNTRVJU
KCFpbnN0YW5jZS0+bV9tZW1vcnkpOworICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNl
dCh2bSwgaW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgLy8g
NS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5v
dCBhbiBpbW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgIEFT
U0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxp
dHkgPT0gV2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOworICAgICAgICAgICAgLy8gaWkuIElmIHRo
ZSBnbG9iYWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4
ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0Iikp
KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOworICAgICAg
ICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCisg
ICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsK
KyAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2lu
ZEluZGV4XS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgICAg
ICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQz
MihleGVjKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206
OkYzMjoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2Jh
bHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAg
ICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIXRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZl
IHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1v
cnlJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2Ug
Y3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAgICAg
ICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0s
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKworICAg
ICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCisgICAgICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNlTm9u
TnVsbCgpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24uaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBo
YXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24u
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFo
YXNUYWJsZUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBj
cmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4
ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1
Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVt
KCkpOworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRl
IGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCisgICAgICAgICAgICAvLyBJZiBp
dCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxp
ZGF0aW9uIGVycm9yLgorICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+bV90
YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhh
dmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVj
a2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lz
dGVycy4KKyAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnko
KSkpKSk7CisgICAgfQorICAgIAorICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFTU0VS
VChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9i
YWwpOworICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7
IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFs
SW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0
aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAgICBp
ZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJ
bXBvcnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBv
cnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+
c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5p
dGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKCFpbnN0YW5j
ZS0+Y29kZUJsb2NrKCkpOworICAgIGluc3RhbmNlLT5tX2NvZGVCbG9jay5zZXRNYXlCZU51bGwo
dm0sIGluc3RhbmNlLCBqc01vZHVsZS0+Y29kZUJsb2NrKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkp
KTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkgfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggZTIyODQ5Njk2NzIwNWEzMTM2
Yzg4M2JiZGUzMjZhZGJjNzExMTMwZC4uZWM5YmM4ZTgxNDA3MmI3ZWUyNWU5MmI5YjQ5ZTEwODQ2
YWJmZDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTM4LDUxICszOCwzNCBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVs
ZTsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJs
eU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5tb2R1bGUoKTsKLSAgICB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KKyAgICBi
b29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gY29kZUJsb2NrKCkgJiYgY29kZUJsb2Nr
KCktPmluaXRpYWxpemVkKCk7IH0KKyAgICB2b2lkIGFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKFZN
JiwgUmVmPFdhc206OlBsYW4+KTsKKyAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBFeGVj
U3RhdGUqKTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gbV9j
b2RlQmxvY2suZ2V0KCk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7Ci0gICAgICAgIHJldHVybiAm
aW1wb3J0RnVuY3Rpb25zKClbaWR4XTsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KiBpbXBvcnRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SW1wb3J0RnVu
Y3Rpb24oVk0mIHZtLCBKU09iamVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAg
ICAgIGltcG9ydEZ1bmN0aW9uKGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwotICAgIH0KKyAg
ICBKU09iamVjdCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNTRVJU
KGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygpW2lk
eF0uZ2V0KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJu
IG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSBy
ZWNvbXBpbGUuCi0gICAgdm9pZCBzZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5Kik7CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVt
b3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2
YWx1ZSk7IH0KICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1v
cnkoKS0+bWVtb3J5KCkubW9kZSgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxl
KCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBK
U1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7
IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbHMuZ2V0KClbaV07IH0KICAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC05MCwxMSArNzMs
NiBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KICAgICB2
b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgp
W2ldID0gYml0czsgfQogCi0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
KHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0
aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIGlkeDsKLSAgICB9Ci0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xv
YmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1f
Z2xvYmFscyk7IH0KQEAgLTExMyw2ICs5MSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZh
dGU6CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKworICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGY0MTQ2
N2Y0ZmFhZTlkYWEwODE2NzRlN2YyMDU3OGQ0YzVlYjZmM2MuLmEyY2QzNDYxMmE2YjllNGIyYzlk
MjExZWZkODQwOWEwNDY4MDVkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC00MiwzNSArNDIsMTggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9y
eU1vZGU+IG1vZGUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikK
IHsKKyAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciBpcyB0aHJvd24uCi0gICAgcGxhbi5ydW4obW9kZSk7Ci0gICAgaWYgKHBs
YW4uZmFpbGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkp
KTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUo
KSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIGlmIChtb2RlKQotICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkpOwot
Ci0gICAgdW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgp
OwotICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2
bSwgdGhpcywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0dWJz
KCksIHBsYW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7Ci0KLSAgICBwbGFuLmluaXRpYWxpemVDYWxs
ZWVzKGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAg
ICBjb2RlQmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50
cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBvaW50
Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICB9
KTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKLXsKLSAgICBh
dXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlN
b2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwogCi0g
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXplKTsK
LSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlN
b2R1bGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUtPmZpbmlz
aENyZWF0aW9uKHZtLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwogfQogCiBT
dHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzgsNjEg
KzYxLDQwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dl
YkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCisgICAgLCBtX3NvdXJjZUJ1ZmZlcihzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkKIHsKIH0K
IAotSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2Nr
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17
Ci0gICAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlczsg
KytpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja3NbaV0gJiYgbV9jb2RlQmxvY2tzW2ldLT5p
c1NhZmVUb1J1bihtZW1vcnkpKQotICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tpXS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGRvbid0IGhhdmUg
YSBjb2RlIGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCi0gICAg
V2FzbTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVy
LT5kYXRhKCkpLCBtX3NvdXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLQotICAgIGF1dG8qIGNv
ZGVCbG9jayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIEFTU0VSVChwbGFuLmV4cG9y
dHMoKS5zaXplKCkgPT0gbV9leHBvcnRTeW1ib2xUYWJsZS0+c2l6ZSgpKTsKLSAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygp
KQotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChleHAsIG1fZXhwb3J0U3ltYm9sVGFibGUtPmNv
bnRhaW5zKGV4cC5maWVsZC5pbXBsKCkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobW9kZSA9PSBj
b2RlQmxvY2stPm1vZGUoKSk7Ci0gICAgY29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywg
Y29kZUJsb2NrKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi12b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OwogCi0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFdhc206
OlBsYW4gcGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLT50YWtlTW9k
dWxlSW5mb3JtYXRpb24oKTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9u
LT5leHBvcnRzKSB7CisgICAgICAgIEFTU0VSVChleHAuZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90
aGVyVGhyZWFkKCkpOworICAgICAgICBleHAuZmllbGQgPSBBdG9taWNTdHJpbmcoZXhwLmZpZWxk
KTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBpbXAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0
cykgeworICAgICAgICBBU1NFUlQoaW1wLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVh
ZCgpKTsKKyAgICAgICAgaW1wLmZpZWxkID0gQXRvbWljU3RyaW5nKGltcC5maWVsZCk7CisgICAg
ICAgIEFTU0VSVChpbXAubW9kdWxlLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAg
ICAgICAgaW1wLm1vZHVsZSA9IEF0b21pY1N0cmluZyhpbXAubW9kdWxlKTsKKyAgICB9CiAKLSAg
ICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBX
VEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0
byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJv
bFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBw
bGFuLmV4cG9ydHMoKSkgeworICAgIGZvciAoYXV0byYgZXhwIDogbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZXhwb3J0cykgewogICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50
YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5
bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1i
b2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CisgICAgICAgIEFTU0VSVChleHAuZmll
bGQuaW1wbCgpLT5pc0F0b21pYygpKTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChO
b0xvY2tpbmdOZWNlc3NhcnksIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihleHAuZmll
bGQuaW1wbCgpKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0K
IAotICAgIG1fc291cmNlQnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVT
aXplKTsKLSAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRp
b24oKTsKICAgICBtX2V4cG9ydFN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3ltYm9s
VGFibGUpOwotICAgIGNvZGVCbG9ja0Zvcihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0aGlz
LCBjb2RlQmxvY2spOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5oCmluZGV4IDM4OWU2M2EzMzVjMWMxMTdiNjk3Njk3MTBjNjNiZDdmODM0
ZTg2ZTQuLmE0MTc4ODRkZDUxMTkzY2JkMGE2YzYyY2Q2NjkxZDMxOGY0YWUwZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgK
QEAgLTQ4LDM1ICs0OCwzMiBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZN
JiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNp
emUpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRy
PFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAg
ICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25z
dCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIFJlZlB0cjxXYXNt
OjpNZW1vcnk+IHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRp
b24tPm1lbW9yeS50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsgfQogICAgIFN5bWJvbFRhYmxlKiBleHBv
cnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7
IH0KICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMg
dGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBl
eHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21v
ZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpKS5nZXQoKTsgfQotICAgIC8vIFJldHVybnMg
dGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5
IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29k
ZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0
dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQorCisg
ICAgQXJyYXlCdWZmZXImIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQnVmZmVyLmdl
dCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s+JiBjb2RlQmxvY2tGb3IoV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVC
bG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV07IH0KLSAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6
Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIGZy
aWVuZCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOwogCi0gICAgSlNXZWJBc3NlbWJseU1v
ZHVsZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVj
U3RhdGUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9zb3Vy
Y2VCdWZmZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOworICAgIFJlZjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21v
ZHVsZUluZm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRT
eW1ib2xUYWJsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9j
b2RlQmxvY2tzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCmluZGV4IGFjMzE4MWIzZjlkY2VlNGUxMzNiMDg3ZmY3MWY0OTAxNWU0
ODhkMmQuLmM3MjIwY2M0ZGZjMmFhNmQ0NjI4NjQwOTljMWJjMzVhOTY0OWNmZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5Lmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgi
CisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgpAQCAtNDUsOCArNDcsNiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCiBjb25zdCBD
bGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5j
dGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlJbnN0YW5j
ZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IpIH07
CiAKIC8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5oCkBA
IC01NCwyNjkgKzU0LDUyIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfCiAgQGVuZAogICovCiAK
K3VzaW5nIFdhc206OlBsYW47CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
YXV0byYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1bGUgaW5z
dGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBq
c01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBleGVjLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKCFqc01vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5j
ZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwg
cnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CisgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4o
dm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5z
dGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5k
ZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogCiAgICAgLy8g
SWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShp
bXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBK
U1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1w
b3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3Nl
bWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdl
YkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZh
dWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkp
OwogICAgIAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLQotICAgIHRocm93
U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwgaW1wb3J0
T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9i
amVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKLXsKLSAgICBhdXRvJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwot
Ci0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0g
anNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0KLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsm
XSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAgIC8v
IElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBv
cnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBpZiAo
bW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJj
YW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1wb3J0
cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIpKSk7
Ci0KLSAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0
ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsK
LSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1v
ZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0KLSAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1
bGVOYW1lc3BhY2UoZXhlYykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
bnVsbHB0cik7Ci0KLSAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5p
dGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNz
ZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3Bl
Y3RpdmVseS4KLSAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBv
ZiBleHRlcm5hbCB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0gMDsK
LSAgICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsKLQotICAgIGJvb2wgaGFzTWVtb3J5
SW1wb3J0ID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOwotICAgIC8v
IEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgotICAgIGZvciAoYXV0byYgaW1w
b3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewotICAgICAgICAvLyAxLiBMZXQgbyBi
ZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5t
b2R1bGVfbmFtZSkuCi0gICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRP
YmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBu
b3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVW
YWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVl
KSkpOwotCi0gICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdl
dChvLCBpLml0ZW1fbmFtZSkKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVj
dC0+Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewot
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAg
IC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJZiBJ
c0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlM
aXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7Ci0KLSAgICAgICAg
ICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKLSAgICAg
ICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6
Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0gICAgICAg
ICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKLSAg
ICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2Fz
bUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIC8vIGEu
IElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGks
IHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRl
eCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFw
cGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGIu
IExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJ
bmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tp
bXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUg
cHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAgICAvLyBhLiBM
ZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUg
d2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNj
cmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBh
bnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCi0gICAgICAgICAgICAvLyBO
b3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KLSAgICAgICAgICAgIC8vIGl2
LiBBcHBlbmQgdiB0byBmdW5jcy4KLSAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlND
ZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIu
IGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2
LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgotCi0gICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0
RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dEltcG9ydEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKyspOwotICAg
ICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTog
ewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBz
aG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAg
IC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICBoYXNU
YWJsZUltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxl
ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwotICAgICAg
ICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVk
SW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwot
ICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7Ci0gICAg
ICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0
IGlzIHRvbyBzbWFsbCIpKSk7Ci0KLSAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9u
Lm1heGltdW0oKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGFj
dHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0
dWFsTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9y
dCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQg
aXQgZG9lcyIpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVj
dGVkTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRh
YmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4
aW11bSciKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYg
dG8gdGFibGVzLgotICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1w
b3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
Ok1lbW9yeTogewotICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhpcyBzaG91
bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSk7Ci0gICAgICAgICAgICBoYXNN
ZW1vcnlJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKLSAg
ICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwg
dGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1lbW9yeSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKLQotICAgICAgICAgICAgV2FzbTo6UGFn
ZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFs
KCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+
bWVtb3J5KCkuaW5pdGlhbCgpOwotICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBl
Y3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQg
cHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAgICAgICAg
ICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFj
dHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWFjdHVhbE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1
aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFjdHVhbE1heGlt
dW0gPiBleHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVj
dGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlpLiBB
cHBlbmQgdiB0byBtZW1vcmllcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1v
cnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhl
YywgbWVtb3J5KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICAvLyA1LiBJZiBpIGlzIGEg
Z2xvYmFsIGltcG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJs
ZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUlu
Zm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpH
bG9iYWw6OkltbXV0YWJsZSk7Ci0gICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90eXBl
IG9mIGkgaXMgaTY0IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3NlbWJs
eS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tp
bXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOwotICAgICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJp
bXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSk7Ci0gICAgICAgICAgICAvLyBpaWku
IEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIEFT
U0VSVChudW1JbXBvcnRHbG9iYWxzID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAg
c3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNl
LT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHZhbHVlLmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24o
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBl
aXRoZXIgaGF2ZSBhIE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4
Y2VwdGlvbi4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNN
ZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1v
cnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2Fz
bTo6TWVtb3J5PiBtZW1vcnk7Ci0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5ID0ganNNb2R1
bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwot
ICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywKLSAgICAgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxs
KCkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0
cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2
bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgLy8gVGhlcmUgYXJlIHRocmVl
IHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiBp
bml0aWFsaXplZCBDb2RlQmxvY2sgKHJ1bm5hYmxlKSwgc28gd2UganVzdCBuZWVkIHRvIGZpbmFs
aXplQ3JlYXRpb24uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNv
IHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8v
IDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywg
c28gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgorCisgICAg
aWYgKCFpbnN0YW5jZS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpZiAoaW5zdGFuY2UtPmNv
ZGVCbG9jaygpKQorICAgICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0ZVBs
YW5TeW5jaHJvbm91c2x5KGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cGxhbigpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcg
UGxhbih2bSwgbW9kdWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFBsYW46OmRvbnRG
aW5hbGl6ZSkpOworICAgICAgICAgICAgcGxhbi0+c2V0TW9kZShpbnN0YW5jZS0+bWVtb3J5TW9k
ZSgpKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5hZGRVbml0aWFsaXplZENvZGVCbG9jayh2bSwg
cGxhbi5jb3B5UmVmKCkpOworCisgICAgICAgICAgICBhdXRvJiB3b3JrbGlzdCA9IFdhc206OmVu
c3VyZVdvcmtsaXN0KCk7CisgICAgICAgICAgICB3b3JrbGlzdC5lbnF1ZXVlKHBsYW4uY29weVJl
ZigpKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkocGxh
bi5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB7Ci0gICAgICAgIGlmICghIW1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJ
bmZvcm1hdGlvbi5pc0ltcG9ydCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVy
IGhhdmUgYSBUYWJsZSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlv
bi4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc1RhYmxlSW1wb3J0KTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYg
IWhhc1RhYmxlSW1wb3J0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKLSAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24uCi0gICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUo
ZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0
cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3Jt
YXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGlt
dW0oKSk7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2Nh
dGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4KLSAgICAgICAgICAgIC8vIElm
IGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZh
bGlkYXRpb24gZXJyb3IuCi0gICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9u
KCkpOwotICAgICAgICAgICAgQVNTRVJUKHRhYmxlKTsgCi0gICAgICAgICAgICBpbnN0YW5jZS0+
c2V0VGFibGUodm0sIHRhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaW5zdGFu
Y2UtPm1lbW9yeSgpKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVt
b3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVs
bHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCi0gICAgICAg
IGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIGV4ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVj
dHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7Ci0gICAgfQotCi0gICAg
Ly8gR2xvYmFscwotICAgIHsKLSAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gbW9k
dWxlSW5mb3JtYXRpb24uZmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGdsb2JhbEluZGV4ID0gbnVtSW1wb3J0R2xvYmFsczsgZ2xvYmFsSW5kZXggPCBtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzLnNpemUoKTsgKytnbG9iYWxJbmRleCkgewotICAgICAgICAgICAgY29u
c3QgYXV0byYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tnbG9iYWxJbmRleF07
Ci0gICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpH
bG9iYWw6OklzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25U
eXBlID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgewotICAgICAgICAgICAgICAg
IEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2Jh
bHMpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGlu
c3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFs
KGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgbW9kdWxlUmVjb3JkLT5kdW1wKCk7Ci0gICAgSlNWYWx1ZSBzdGFydFJl
c3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXJ0UmVzdWx0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OwotCi0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9u
KHZtLCBleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoaW5zdGFuY2UpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhl
YykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNTk3MDlmNTE3NTZkYzU1ZWEyYmQy
Nzg2NjM1MDVlOWUzOTM3ZjAxMy4uMzU5OTYyMmYyY2EyNDliMWUxZDgxMjBjYTM2M2FkNjE0ZTVh
NmU3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTc1LDEzICs3NSwxMyBAQCBK
U1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYnVmZgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgc2l6ZV90IGJ5dGVPZmZz
ZXQ7Ci0gICAgc2l6ZV90IGJ5dGVTaXplOwotICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVm
ZmVyRnJvbVZhbHVlKGV4ZWMsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZt
LCBleGVjLCBidWZmZXIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
LSAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNy
ZWF0ZSh2bSwgZXhlYywgc3RydWN0dXJlLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwor
ICAgIFJlZlB0cjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFdhc206OlBsYW4odm0s
ICpzb3VyY2UsIFdhc206OlBsYW46OlZhbGlkYXRpb24sIFdhc206OlBsYW46OmRvbnRGaW5hbGl6
ZSkpOworICAgIGlmICghcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJy
b3I6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgpLCBwbGFuLT5lcnJvck1lc3NhZ2UoKSkpOworICAg
IHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1
cmUsIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShwbGFuKSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhp
c1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBmZmZlZTVjMTBmNTlmODFmMWJiZTNj
ZjFkNTQ3N2NmOTBjNjg3ZjcwLi5mYjU2MWQ5ZGRiODdlNzQwNzI5YTYyOWI1MTg2MTcwNTQ5MTZi
YTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC03Myw4ICs3MywxMCBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwg
Y29uc3QgV2FzbQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDog
bW9kdWxlSW5mb3JtYXRpb24uZXhwb3J0cykKLSAgICAgICAgYWRkRXhwb3J0RW50cnkoRXhwb3J0
RW50cnk6OmNyZWF0ZUxvY2FsKGV4cC5maWVsZCwgZXhwLmZpZWxkKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi5leHBvcnRzKSB7CisgICAgICAgIElkZW50
aWZpZXIgZmllbGQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgZXhwLmZpZWxkKTsKKyAg
ICAgICAgYWRkRXhwb3J0RW50cnkoRXhwb3J0RW50cnk6OmNyZWF0ZUxvY2FsKGZpZWxkLCBmaWVs
ZCkpOworICAgIH0KIH0KIAogdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtODUsMTQgKzg3LDEz
IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3N0YXJ0RnVuY3Rpb24pOwogfQogCi12b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK3Zv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBtb2R1bGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKICAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKLSAgICBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBtb2R1bGUgPSBpbnN0YW5jZS0+bW9kdWxlKCk7CiAgICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogY29kZUJsb2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKTsKIApAQCAtMTEyLDcgKzExMyw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhCiAgICAgICAgICAgICAvLyAgIGlpLiAoTm90ZTogQXQgbW9zdCBvbmUgd3JhcHBlciBpcyBj
cmVhdGVkIGZvciBhbnkgY2xvc3VyZSwgc28gZnVuYyBpcyB1bmlxdWUsIGV2ZW4gaWYgdGhlcmUg
YXJlIG11bHRpcGxlIG9jY3VycmFuY2VzIGluIHRoZSBsaXN0LiBNb3Jlb3ZlciwgaWYgdGhlIGl0
ZW0gd2FzIGFuIGltcG9ydCB0aGF0IGlzIGFscmVhZHkgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhv
dGljIE9iamVjdCwgdGhlbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0IHdpbGwgYmUgZm91
bmQuIEZvciBpbXBvcnRzIHRoYXQgYXJlIHJlZ3VsYXIgSlMgZnVuY3Rpb25zLCBhIG5ldyB3cmFw
cGVyIHdpbGwgYmUgY3JlYXRlZC4pCiAgICAgICAgICAgICBpZiAoZXhwLmtpbmRJbmRleCA8IGZ1
bmN0aW9uSW1wb3J0Q291bnQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4ID0gZXhwLmtpbmRJbmRleDsKLSAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25J
bXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpOwor
ICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBv
cnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3Nl
bWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKQogICAgICAgICAgICAgICAgICAg
ICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb25JbXBvcnQ7CiAgICAgICAgICAgICAgICAgZWxzZSB7
CkBAIC0xMjgsNyArMTI5LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5k
ZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJ
bmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUg
PSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUs
IHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVs
ZCwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OSw3ICsxODAsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICBib29sIHNob3VsZFRocm93UmVhZE9ubHlF
cnJvciA9IGZhbHNlOwogICAgICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gdHJ1ZTsK
ICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgc3ltYm9sVGFibGVQdXRU
b3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIGV4cC5maWVsZCwgZXhw
b3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25vcmVSZWFkT25seUVycm9y
cywgcHV0UmVzdWx0KTsKKyAgICAgICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQo
bW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBleHAu
ZmllbGQpLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IsIGlnbm9yZVJl
YWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwdXRSZXN1
bHQpOwogICAgIH0KIApAQCAtMTkyLDcgKzE5Myw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
CiAgICAgICAgIEFTU0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBB
U1NFUlQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7CiAgICAgICAgIGlm
IChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3Vu
dCgpKSB7Ci0gICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5p
bXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSktPmdldCgpOworICAgICAgICAg
ICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3Rh
cnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2
bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2UpOwpAQCAtMjUxLDcgKzI1Miw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICB1aW50MzJfdCBmdW5j
dGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbkluZGljZXNbaV07CiAgICAgICAgICAgICAgICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUlu
ZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGpzQ2FzdDxK
U09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGpzQ2Fz
dDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1
bmN0aW9uSW1wb3J0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4o
dm0sIGZ1bmN0aW9uSW1wb3J0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGV2
ZXIgaW1wb3J0IGEgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIHdlIHNldCB0aGUgaW1wb3J0
IGFzIHRoZSB1bndyYXBwZWQgdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAppbmRleCA1ZGNlYjQyZDhmOGMy
MDY5ODI5NGJhYTBjNmJiY2Y0OWI4ZGNkNDNkLi4yYjgzNzJlN2M3YzMzOTQ3OGU5YmU3NjUxNzdl
Yjg1MjQxNmQ0N2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CitjbGFzcyBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbjsKIAogLy8gQmFzZWQgb24gdGhl
IFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNwZWNpZmljYXRpb24KQEAgLTQ3LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBj
cmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKIAotICAgIHZvaWQgbGluayhFeGVjU3RhdGUq
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKyAgICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKik7CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ1Zjlk
OWFjMWIxZmJiY2Q1Y2I5MWQ3ZmFlYmU0ODllZDA1YjQ4ZjguLjRjMzk3OTZmMjkyNTQwY2JmN2E3
NWFiZmZiNzU0ZjFmMWFjMTllMWQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1p
bGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1h
a2UgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9qcy1h
cGkvTW9kdWxlLWNvbXBpbGUuanM6CisgICAgICAgIChhc3luYy50ZXN0UHJvbWlzZUFQSSk6Cisg
ICAgICAgICogd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanM6IEFk
ZGVkLgorICAgICAgICAoYXN5bmMudGhyb3dFeG4pOgorICAgICAgICAoYXN5bmMudGVzdCk6Cisg
ICAgICAgIChwLmNhdGNoKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5z
dGFudGlhdGUtcGFyYWxsZWwuanM6IEFkZGVkLgorICAgICAgICAoYXN5bmMudGVzdCk6CisgICAg
ICAgIChwLmNhdGNoKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFu
dGlhdGUuanM6CisgICAgICAgIChhc3NlcnQuZXEuYXN5bmMudGVzdCk6CisgICAgICAgIChhc3Nl
cnQuZXEpOgorICAgICAgICAodGVzdC5hc3luYy50ZXN0KToKKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAoYXNzZXJ0LnRydXRoeS5hc3luYy50ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKGFzc2Vy
dC50cnV0aHkpOiBEZWxldGVkLgorCiAyMDE3LTAzLTIzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBqc05vbnRyaXZpYWxTdHJpbmcg
YWdyZXNzaXZlbHkgZm9yIFRvU3RyaW5nKEludDUyKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNv
bXBpbGUuanMKaW5kZXggZjM0M2M2ZTkzYzczMTI1ZTQ5YWQ5M2Y0YWE3MmExYTA5ZTY5ZTJiYi4u
M2Q0ZDI3OGJiNGQ4NTk0ZjUyNTQzM2E5Mjc5NGUyYzJmZmU0MDA5YSAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL01vZHVsZS1jb21waWxlLmpzCkBAIC0xLDcgKzEsOCBAQAorYXN5bmNUZXN0KDQpOworCiBp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIGltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnOwogCi1sZXQgZG9uZSA9IGZhbHNlOwogYXN5bmMgZnVuY3Rpb24g
dGVzdFByb21pc2VBUEkoKSB7CiAgICAgewogICAgICAgICAvLyBDYW4ndCBkZWNsYXJlIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LgpAQCAtMTQsMzkgKzE1LDMzIEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQ
cm9taXNlQVBJKCkgewogICAgICAgICAgICAgLkNvZGUoKQogICAgICAgICAgICAgLkVuZCgpOwog
Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAg
YXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwog
ICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKICAgICAgICAg
ICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7
Ci0gICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUubWVzc2FnZSA9PT0gIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzQgLyA0MzogTWVtb3J5IHNlY3Rpb24gY2Fubm90
IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSBtZW1vcnkgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5
LmNvbXBpbGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgICAgICAgICBh
c3NlcnQudHJ1dGh5KGUubWVzc2FnZSA9PT0gIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMzQgLyA0MzogTWVtb3J5IHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIElt
cG9ydCBoYXMgYSBtZW1vcnkiKTsKKyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAg
ICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2Fp
dCBXZWJBc3NlbWJseS5jb21waWxlKCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAg
ICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2Yg
VHlwZUVycm9yKTsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1
bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVh
dGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZSgpJykiKTsKKyAgICAgICAgICAgIGFzeW5jVGVzdFBh
c3NlZCgpOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKDIwKTsKICAgICAgICAgfSBjYXRjaChl
KSB7Ci0gICAgICAgICAgICB0aHJldyA9IHRydWU7CiAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5
KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOwogICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2Fn
ZSwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlCdWZmZXJWaWV3IG9yIGFuIEFycmF5
QnVmZmVyIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5jb21waWxlKDIwKScpIik7CisgICAgICAg
ICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1dGh5
KHRocmV3KTsKICAgICB9CiAKICAgICB7CkBAIC02MCwxMSArNTUsOCBAQCBhc3luYyBmdW5jdGlv
biB0ZXN0UHJvbWlzZUFQSSgpIHsKIAogICAgICAgICBsZXQgbW9kdWxlID0gYXdhaXQgV2ViQXNz
ZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwogICAgICAgICBhc3Nl
cnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CisgICAgICAg
IGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KLQotICAgIGRvbmUgPSB0cnVlOwogfQogCiB0ZXN0
UHJvbWlzZUFQSSgpOwotZHJhaW5NaWNyb3Rhc2tzKCk7Ci1hc3NlcnQudHJ1dGh5KGRvbmUpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJh
bGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxs
ZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGY2YTM2ZmJkZGZkNTIxYzJkZDk1ZTYzZjdiZWFiNDVhM2I0YThk
NwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNv
bXBpbGUtcGFyYWxsZWwuanMKQEAgLTAsMCArMSw2NSBAQAorYXN5bmNUZXN0KDEpOworCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20g
Jy4uL0J1aWxkZXIuanMnOworCithc3luYyBmdW5jdGlvbiB0aHJvd0V4bigpIHsKKyAgICB0aHJv
dyBuZXcgRXJyb3IoKTsKK30KKworYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBjb25zdCBs
b29wRGVwdGggPSAxMDsKKyAgICBjb25zdCBudW1Db21waWxhdGlvbnMgPSAxOworICAgIGNvbnN0
IG51bVZhcnMgPSAzMDsKKyAgICBjb25zdCBwYXJhbXMgPSBbXTsKKyAgICBwYXJhbXMubGVuZ3Ro
ID0gbnVtVmFyczsKKyAgICBwYXJhbXMuZmlsbCgiaTMyIik7CisKKyAgICBsZXQgYnVpbGRlciA9
IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAuRnVuY3Rp
b24oImZvbyIpCisgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgLkNvZGUoKQorICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXMsIHJldDogImkzMiIgfSk7CisKKyAgICBjb25zdCBt
YWtlTG9vcCA9IChidWlsZGVyLCBkZXB0aCkgPT4geworICAgICAgICBpZiAoZGVwdGggPT09IDAp
CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKKworICAgICAgICBidWlsZGVyID0gYnVpbGRl
cgorICAgICAgICAgICAgLkxvb3AoImkzMiIsIChiKSA9PiB7CisgICAgICAgICAgICAgICAgICBi
LkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyU3ViKCkKKyAgICAgICAgICAgICAgICAgICAgLlRlZUxvY2FsKDApCisg
ICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
RXF6KCkKKyAgICAgICAgICAgICAgICAgICAgLkJySWYoMSk7CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZUxvb3AoYiwgZGVwdGggLSAxKS5CcigwKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gYnVpbGRlcgorCisgICAgfQorCisgICAgYnVpbGRlciA9IG1ha2VMb29wKGJ1
aWxkZXIsIGxvb3BEZXB0aCk7CisgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuRW5kKCk7CisK
KyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisKKyAgICBsZXQg
Y29tcGlsYXRpb25zID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Db21waWxhdGlv
bnM7ICsraSkgeworICAgICAgICBjb21waWxhdGlvbnMucHVzaChXZWJBc3NlbWJseS5jb21waWxl
KGJpbikpOworICAgIH0KKworICAgIGF3YWl0IFByb21pc2UuYWxsKGNvbXBpbGF0aW9ucyk7Cit9
CisKK2xldCBwID0gdGVzdCgpOworcC5jYXRjaCgoZSkgPT4geworICAgIHByaW50KCJGYWlsZWQ6
ICIsIGUpOworICAgIHByaW50KGUuc3RhY2spOworfSk7CitwLnRoZW4oKCkgPT4gYXN5bmNUZXN0
UGFzc2VkKCkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHkt
aW5zdGFudGlhdGUtcGFyYWxsZWwuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJs
eS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjU3NjQ5NWNmOTQ4NmY1ZDk5
MGY3ZjkzNzY0MzlmYmM3MGJkNGFhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUtcGFyYWxsZWwuanMKQEAgLTAsMCArMSw4MiBA
QAorYXN5bmNUZXN0KDEpOworCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworCithc3luYyBmdW5jdGlv
biB0ZXN0KCkgeworICAgIGNvbnN0IGxvb3BEZXB0aCA9IDEwMDsKKyAgICBjb25zdCBudW1Db21w
aWxhdGlvbnMgPSAxOworICAgIGNvbnN0IG51bVZhcnMgPSAzMDsKKyAgICBjb25zdCBwYXJhbXMg
PSBbXTsKKyAgICBwYXJhbXMubGVuZ3RoID0gbnVtVmFyczsKKyAgICBwYXJhbXMuZmlsbCgiaTMy
Iik7CisKKyAgICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1l
bW9yeSIsIHsgaW5pdGlhbDogMCB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigiZm9v
IiwgeyBwYXJhbXMsIHJldDogImkzMiIgfSk7CisKKyAgICBjb25zdCBtYWtlTG9vcCA9IChidWls
ZGVyLCBkZXB0aCkgPT4geworICAgICAgICBpZiAoZGVwdGggPT09IDApCisgICAgICAgICAgICBy
ZXR1cm4gYnVpbGRlcjsKKworICAgICAgICBidWlsZGVyID0gYnVpbGRlcgorICAgICAgICAgICAg
Lkxvb3AoImkzMiIsIChiKSA9PiB7CisgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1
YigpCisgICAgICAgICAgICAgICAgICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAg
ICAgICAgICAgIC5CcklmKDEpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIs
IGRlcHRoIC0gMSkuQnIoMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxk
ZXI7CisgICAgfQorCisgICAgYnVpbGRlciA9IG1ha2VMb29wKGJ1aWxkZXIsIGxvb3BEZXB0aCk7
CisgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFz
c2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IDAgfSk7CisgICAgY29uc3QgaW1wb3J0T2JqZWN0ID0g
eyAiaW1wIjogeyAibWVtb3J5IjogbWVtb3J5IH0gfTsKKworICAgIC8vIENvbXBpbGUgYSBidW5j
aCBvZiBpbnN0YW5jZXMgaW4gcGFyYWxsZWwuCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAg
Y29tcGlsYXRpb25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBpbXBvcnRPYmpl
Y3QpKTsKKyAgICB9CisKKyAgICBsZXQgW2luc3RdID0gYXdhaXQgUHJvbWlzZS5hbGwoY29tcGls
YXRpb25zKTsKKyAgICBsZXQgbW9kdWxlID0gaW5zdC5tb2R1bGU7CisKKyAgICAvLyBDb21waWxl
IGEgYnVuY2ggb2YgaW5zdGFuY2VzIGZyb20gbW9kdWxlcyBpbiBwYXJhbGxlbC4KKyAgICBjb21w
aWxhdGlvbnMgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNvbXBpbGF0aW9uczsg
KytpKSB7CisgICAgICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRl
KG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgfQorCisgICAgYXdhaXQgUHJvbWlzZS5hbGwo
Y29tcGlsYXRpb25zKTsKKworICAgIC8vIENvbXBpbGUgYW4gaW5zdGFuY2UgZnJvbSBhIG1vZHVs
ZSBpbiBwYXJhbGxlbCwgaGF2ZSBzeW5jIGNvbXBpbGF0aW9uIHN0ZWFsIGl0LgorICAgIGNvbXBp
bGF0aW9ucyA9IFtdOworICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIGltcG9ydE9iamVjdCk7CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChj
b21waWxhdGlvbnMpOworfQorCitsZXQgcCA9IHRlc3QoKTsKK3AuY2F0Y2goKGUpID0+IHsKKyAg
ICBwcmludCgiRmFpbGVkOiAiLCBlKTsKKyAgICBwcmludChlLnN0YWNrKTsKK30pOworcC50aGVu
KCgpID0+IGFzeW5jVGVzdFBhc3NlZCgpKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1h
cGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWIt
YXNzZW1ibHktaW5zdGFudGlhdGUuanMKaW5kZXggYTkzYmM2MDVmZjE3ZGRlZTgwMWY3YTc1MzM0
MTg2YTg2MWQ0NDJhZC4uNzJmYzQ3ZTI1MmRkNzQ0YmNmMjA4NWE5NGYxNmJmYWJjNTBhMGM0MCAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUu
anMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanMK
QEAgLTEsMyArMSw1IEBACithc3luY1Rlc3QoNyk7CisKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9t
ICcuLi9hc3NlcnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAK
QEAgLTE5LDE4ICsyMSwxNSBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVu
Z3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
IAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAg
ICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlKGJpbik7CiAgICAgICAgIGFzc2VydC50cnV0aHkobW9kdWxlIGluc3RhbmNlb2YgV2ViQXNz
ZW1ibHkuTW9kdWxlKTsKICAgICAgICAgYXNzZXJ0LnRydXRoeShpbnN0YW5jZSBpbnN0YW5jZW9m
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKTsKICAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9y
dHMuZm9vKDIwKSwgMSk7Ci0gICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQ
YXNzZWQoKTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0g
ICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgIHRlc3QoKTsKIH0KIAogewpAQCAtNDgsMTkgKzQ3
LDE2IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRv
bmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewog
ICAgICAgICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3YWl0IFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlKGJpbiwgbnVsbCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAg
YXNzZXJ0LmVxKGUubWVzc2FnZSwgInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5pbnN0
YW50aWF0ZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QgKGV2YWx1YXRpbmcgJ1dlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlKGJpbiwgbnVsbCknKSIpOwogICAgICAgICB9Ci0gICAgICAgIGRv
bmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAgICB9CiAKICAgICB0ZXN0
KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKIH0K
IAogewpAQCAtNzgsMjAgKzc0LDE3IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkg
ewogICAgICAgICB0cnkgewogICAgICAgICAgICAgbGV0IHttb2R1bGUsIGluc3RhbmNlfSA9IGF3
YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbik7CiAgICAgICAgIH0gY2F0Y2goZSkgewog
ICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCB2YWxpZGF0ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVj
dGVkIHR5cGUsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlKGJpbiknKSIpOworICAgICAgICAgICAgYXNzZXJ0LmVxKGUubWVzc2FnZSwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHZhbGlkYXRlOiBjb250cm9sIGZsb3cgcmV0dXJu
cyB3aXRoIHVuZXhwZWN0ZWQgdHlwZSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMCIpOwogICAgICAg
ICB9Ci0gICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBhc3luY1Rlc3RQYXNzZWQoKTsKICAg
ICB9CiAKICAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRy
dXRoeShkb25lKTsKIH0KIAogewpAQCAtMTEwLDE5ICsxMDMsMTYgQEAgYXNzZXJ0LmVxKFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5j
IGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVs
ZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7
bWVtb3J5OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQu
ZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtp
bXA6IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2Us
ICJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFz
c2VkKCk7CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAg
IGFzc2VydC50cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTE0MSwyMCArMTMxLDE3IEBAIGFzc2Vy
dC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsK
ICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICAgICAg
bGV0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7
bWVtb3J5OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQu
ZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtp
bXA6IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2Us
ICJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYXN5bmNUZXN0UGFz
c2VkKCk7CiAgICAgfQogCiAgICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAg
IGFzc2VydC50cnV0aHkoZG9uZSk7CiB9CiAKIHsKQEAgLTE3MiwxOCArMTU5LDE1IEBAIGFzc2Vy
dC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsK
ICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KGluc3Rh
bmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwogICAgICAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
ICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFpbk1p
Y3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQogCiB7CkBAIC0yMDIsNyAr
MTg2LDYgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAK
ICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQg
ZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CkBAIC0yMTAs
MTAgKzE5Myw4IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEp
OwogICAgICAgICAgICAgLy8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCiAgICAg
ICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBB
cnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlKDI1KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgIGFzeW5jVGVzdFBhc3NlZCgpOwogICAgIH0KIAogICAgIHRlc3QoKTsKLSAgICBkcmFp
bk1pY3JvdGFza3MoKTsKLSAgICBhc3NlcnQudHJ1dGh5KGRvbmUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305519</attachid>
            <date>2017-03-27 15:30:14 -0700</date>
            <delta_ts>2017-03-27 15:41:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170327153014.patch</filename>
            <type>text/plain</type>
            <size>227918</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li5iZWU4NTI1ZDdkZmQ0NzRj
NTA0MzBmZDZkZTA4MzNhNzRlZWIxNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0U3Rh
cnQpOgorICAgICAgICAoZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQpOgorICAgICAgICAoZnVuY3Rp
b25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VB
cmd1bWVudHMpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlz
ZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVy
cmVkOjpwcm9taXNlQXN5bmNQZW5kaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5jcHAuCisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6Cisg
ICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKToKKyAgICAgICAgKEpTQzo6
SlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9v
cFRpbWVyOjp0aW1lckRpZEZpcmUpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcik6
CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24pOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayk6CisgICAgICAgICogcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmguCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzdG9w
UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6OnJlamVj
dCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlND
OjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpj
b21waWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUluc3RhbnRp
YXRlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAg
ICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpwbGFuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6cnVubmFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjplcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxsZWVzKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAq
IHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11
bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpoYXNSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjp0
YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJ
bmZvcm1hdGlvbjo6bW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpNb2R1bGVQYXJzZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENv
dW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxp
emVDYWxsZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OmRvbnRGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmV4cG9ydHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbnRlcm5hbEZ1bmN0aW9u
Q291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlTW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlQ2FsbExpbmtJbmZvcyk6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnRha2VXYXNtRXhpdFN0dWJzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6c2V0TW9kZUFuZFByb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGVuZGluZ1Byb21pc2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVycm9y
TWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNC
ZWVuUHJlcGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW5JbmxpbmVzLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmguCisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNt
L1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnByaW9yaXR5U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9yaXR5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6Oml0ZXJhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21w
bGV0ZVBsYW5TeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0
b3BBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpl
bnN1cmVXb3JrbGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6V29ya2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVk
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBhZnRlciB3ZSBkbyBUTFMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODI2N2QwMzEwODZlNTU2MDlj
OGI5ZWU3NmMyOTVmN2IyN2FkM2MzZi4uODI2N2FlYWQyYjA5ZGFkNDM2YzEwYzNiZGQ1ZTYyNjQ3
YWIxZWVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTAxLDcgKzUw
MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwUHJvZmlsZXIu
Y3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3QuY3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3RCdWls
ZGVyLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAogICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCiAgICAgaGVhcC9MYXJnZUFs
bG9jYXRpb24uY3BwCkBAIC04MDAsNiArNzk5LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKICAgICBydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCiAgICAgcnVudGltZS9KU1Byb3h5LmNwcAorICAg
IHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCiAgICAgcnVudGltZS9KU1Njb3BlLmNwcAogICAg
IHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcAogICAgIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAKQEAgLTg0OSw2ICs4NDksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHAKICAgICBydW50aW1lL09wdGlvbnMuY3Bw
CiAgICAgcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKKyAgICBydW50aW1lL1Byb21pc2VE
ZWZlcnJlZFRpbWVyLmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAogICAg
IHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAK
QEAgLTk0Miw2ICs5NDMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHdhc20v
V2FzbVBsYW4uY3BwCiAgICAgd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAogICAgIHdhc20vV2FzbVZh
bGlkYXRlLmNwcAorICAgIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCiAgICAgd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q2FsbGVlLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjAwMzEwYzM3YWIxNGE3MmRmNTdh
YjI5MWM4MmNhNzQwMzc4M2MwZC4uZWJhNGMzMjA3YmQzZmJiNjNhMmMwYjM4YTYyNzk4NThkYWQz
ZGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMTYsMTEgKzEzMTYsMTcg
QEAKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OworCQk1
MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlE
RCAvKiBXYXNtV29ya2xpc3QuY3BwICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIg
LyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEz
NzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdh
c21QbGFuLmNwcCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURF
MURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzAxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwICovOyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLzsgfTsKKwkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEgLyog
SlNSdW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAq
LzsgfTsKKwkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3
NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLzsgfTsKKwkJNTM0
NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc2MUU3MUUwNkUw
MEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMx
Nzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJ
CTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZG
M0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgKi87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNC
OCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVz
dC5jcHAgKi87IH07CkBAIC0xMzU1LDYgKzEzNjEsNyBAQAogCQk1M0Y0MEU5NTFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQ
YXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovOyB9Owog
CQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTNGOEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGOEQxRkYxRTgzODdENDAwRDIx
MTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovOyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3
RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJNTNGRDA0RDMxRDdBQjI3
NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyog
V2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKQEAgLTIyMzMsOCArMjI0MCw2IEBACiAJ
CUMyQ0YzOUMxMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgx
MDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1
QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggKi87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBI
ZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAw
NTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAq
LzsgfTsKLQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAw
NTRFNDhEIC8qIEhlYXBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJl
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9Owog
CQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTM4MDAsMTEgKzM4MDUsMTcgQEAKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdv
cmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAzMUU3QTExNDYw
MDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbVdvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNSdW5Mb29wVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRp
bWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYx
MkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAw
MTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBUeXBlZEFycmF5Q1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJy
YXlDVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ1LDYgKzM4NTYs
NyBAQAogCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNt
TW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2
QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4
N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3ODgsOCArNDgwMCw2IEBACiAJCUMyQ0YzOUJGMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBw
ZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVy
T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQjE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MDQsOCArNTkxNCw2IEBACiAJCQkJQTU0QzJBQUYx
QzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovLAogCQkJCUE1MzExQzM0MUM3N0NF
QUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLywKIAkJCQlBNTMxMUMzNTFD
NzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oICovLAotCQkJCUMyRTUyNkJC
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAotCQkJCUMyRTUyNkJDMTU5MEVG
MDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5j
cmVtZW50YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCkBAIC02MjczLDExICs2MjgxLDE0IEBACiAJCQkJNTNG
NDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFE
NUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYw
MEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAv
KiBXYXNtUGxhbklubGluZXMuaCAqLywKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2ln
bmF0dXJlLmggKi8sCiAJCQkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0
ZS5jcHAgKi8sCiAJCQkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5o
ICovLAorCQkJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICov
LAorCQkJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NDM0
LDYgKzY0NDUsOCBAQAogCQkJCTE0QTE1NjMwMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFu
Y2VDYWNoZS5oICovLAogCQkJCUJDRDIwMzQ3MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90
eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlw
ZS5oICovLAorCQkJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAgKi8sCisJCQkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZl
cnJlZFRpbWVyLmggKi8sCiAJCQkJMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVBy
b3BlcnR5QXR0cmlidXRlcy5oICovLAogCQkJCTBGRTA1MDBGMUFBOTA5MTEwMEQzM0IzMyAvKiBE
aXJlY3RBcmd1bWVudHMuY3BwICovLAogCQkJCTBGRTA1MDEwMUFBOTA5MTEwMEQzM0IzMyAvKiBE
aXJlY3RBcmd1bWVudHMuaCAqLywKQEAgLTY4MjIsNiArNjgzNSw4IEBACiAJCQkJMEY3QzM5RkMx
QzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJCQlCQ0QyMDJC
RjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJD
MDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzIx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQk3MEIwQTlEMDFBOUI2
NjIwMDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggKi8sCiAJCQkJNTI3NzczREQxQUFGODNBQzAw
QkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLywKIAkJCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFE
QkEgLyogUnVudGltZVR5cGUuaCAqLywKQEAgLTgxMTYsNiArODEzMSw3IEBACiAJCQkJMEZFQzg1
MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0Nv
bXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDgg
LyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMzUsNiArODI1MSw3IEBACiAJCQkJ
QkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFt
ZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRC
Q0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODUyMSw2
ICs4NTM4LDcgQEAKIAkJCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVy
U2V0dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyog
RE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0MwOEUzQzFEQTQxQjgxMDAz
OTQ3OEYgLyogRE9NSklUUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzEx
RTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM3QUQ4M0MxREE0OTI4NjAwRjNENDEyIC8qIERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzN0FEODNEMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRSZWcuaCBp
biBIZWFkZXJzICovLApAQCAtODY5MCw3ICs4NzA4LDYgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0
MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFD
NjU0NEYyMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMx
MUMzNjFDNzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJl
dHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzksNiArOTE1Niw3IEBACiAJCQkJQkMx
OEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3
MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4
MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdC
MjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5NTgsNiArOTk3
Niw3IEBACiAJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMEZCMzA0MUU3
QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0
MjJBNjIxQzE1OEU2QTAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzM4REY1MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0
YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI1MSw2ICsxMDI3MCw3IEBACiAJCQkJ
MTRBRDkxMTcxRENBOTdGRDAwMTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3MzQxRTIxREMyQ0U5NjAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1NDk4MjAzMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3Au
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM0NjM4NzMxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZD
QSAvKiBFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MEMxOUIxRDc3NkE5ODAw
ODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxMkRFMEYxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDMyOCw3ICsxMDM0OCw2IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYz
IC8qIEhlYXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVF
MDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3
MUM3N0NFQ0EwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUMyRTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElD
U3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8q
IElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDY1Miw2ICsxMDY3MSw3IEBACiAJ
CQkJOTkyQUJDRjkxQkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyRjU2QjQxRTRFODRBNDAwMzU5NTNCIC8qIFJlbW90ZUNv
bm5lY3Rpb25Ub1RhcmdldENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4RUQ2NzQxQkVE
NzBBQzAwREQ4MDE3IC8qIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90
ZUluc3BlY3Rpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NTY2ODYxRTRFOEIw
RjAwQUFFMTNDIC8qIFJlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJG
NTZCNTFFNEU4NEE4MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlD
YWxsYmFjay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNr
LmgKaW5kZXggZGRlZTI1ODNlNDllNmI5NjkzOTA4MGUzMzhlYjVhOTljMDQwYjkyYy4uYWY0NzU4
OGQ2MDExOWFkOGRkNTE1ZDhmNGE1MGNmYzcyOTU4MTMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxv
b3BUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRikKQEAgLTQw
LDggKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
OwogY2xhc3MgSGVhcDsKIAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxi
YWNrIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKICAgICBzdGF0aWMgUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IGNyZWF0ZUZ1bGxUaW1lcihIZWFwKik7CiAgICAgc3RhdGljIFJlZlB0cjxHQ0Fj
dGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZUVkZW5UaW1lcihIZWFwKik7CiAKQEAgLTcwLDIxICs3MSwy
MSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBVU0UoQ0YpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZN
KiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAg
ICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsK
ICAgICB9CiAjZWxpZiBVU0UoR0xJQikKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQot
ICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1f
ZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiAgICAgewogICAgIH0K
ICNlbHNlCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGlt
ZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAg
ICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRp
bWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTYxMjhkMDM4MzhjYTRhNzQ1NTBlZDkxNmRmNzdh
MzI1ZDZiNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIK
LQotI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIK
LSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGli
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgCi1jb25z
dCBDRlRpbWVJbnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1
ICogMTA7Ci0KLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0g
ICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCi17Ci0gICAgc2V0UnVuTG9vcCh2bS0+aGVh
cC5ydW5Mb29wKCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BS
ZWYgcnVuTG9vcCkKLXsKLSAgICBpZiAobV9ydW5Mb29wKSB7Ci0gICAgICAgIENGUnVuTG9vcFJl
bW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkp
OwotICAgICAgICBtX3J1bkxvb3AuY2xlYXIoKTsKLSAgICAgICAgbV90aW1lci5jbGVhcigpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAocnVuTG9vcCkgewotICAgICAgICBtX3J1bkxvb3AgPSBydW5M
b29wOwotICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVy
Q29udGV4dCkpOwotICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7Ci0gICAgICAgIG1fdGlt
ZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNf
ZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRl
eHQpKTsKLSAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVy
LmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIH0KLX0KLQotSGVhcFRpbWVyOjp+
SGVhcFRpbWVyKCkKLXsKLSAgICBzZXRSdW5Mb29wKDApOwotfQotCi12b2lkIEhlYXBUaW1lcjo6
dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotewotICAg
IEhlYXBUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihjb250ZXh0UHRyKTsK
LSAgICB0aW1lci0+bV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBSZWZQdHI8Vk0+IHZtID0gdGlt
ZXItPm1fYXBpTG9jay0+dm0oKTsKLSAgICBpZiAoIXZtKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBo
YXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIHRp
bWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKLSAgICAgICAgdGltZXIt
PmRvV29yaygpOwotICAgIH0KLQotICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotfQot
Ci12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMp
Ci17Ci0gICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7Ci0gICAgbV9pc1Nj
aGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci0g
ICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgKyBzX2RlY2FkZSk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNl
OwotfQotCi0jZWxpZiBVU0UoR0xJQikKLQotY29uc3QgbG9uZyBIZWFwVGltZXI6OnNfZGVjYWRl
ID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgaGVhcFRp
bWVyU291cmNlRnVuY3Rpb25zID0gewotICAgIG51bGxwdHIsIC8vIHByZXBhcmUKLSAgICBudWxs
cHRyLCAvLyBjaGVjawotICAgIC8vIGRpc3BhdGNoCi0gICAgW10oR1NvdXJjZSosIEdTb3VyY2VG
dW5jIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjYWxsYmFjayh1c2VyRGF0YSk7Ci0gICAgfSwKLSAgICBudWxscHRyLCAvLyBm
aW5hbGl6ZQotICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKLSAgICBudWxscHRyLCAv
LyBjbG9zdXJlX21hcnNoYWxsCi19OwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0g
ICAgOiBtX3ZtKHZtKQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotICAgICwgbV90
aW1lcihhZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNp
emVvZihHU291cmNlKSkpKQotewotICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCks
ICJbSmF2YVNjcmlwdENvcmVdIEhlYXBUaW1lciIpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewotICAg
ICAgICBhdXRvJiBoZWFwVGltZXIgPSAqc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4odXNlckRhdGEp
OwotICAgICAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShoZWFwVGltZXIubV90aW1lci5nZXQo
KSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSArIEhlYXBUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNf
UEVSX1NFQyk7Ci0gICAgICAgIGhlYXBUaW1lci50aW1lckRpZEZpcmUoKTsKLSAgICAgICAgcmV0
dXJuIEdfU09VUkNFX0NPTlRJTlVFOwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1
bHQoKSk7Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci0gICAgZ19zb3VyY2VfZGVz
dHJveShtX3RpbWVyLmdldCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSgp
Ci17Ci0gICAgbV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkg
ewotICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOwotICAg
ICAgICBkb1dvcmsoKTsKLSAgICB9Ci0KLSAgICBtX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12
b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17
Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rv
bmljX3RpbWUoKSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQot
ewotICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90
b25pY190aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1
bGVkID0gZmFsc2U7Ci19Ci0jZWxzZQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAg
IDogbV92bSh2bSkKLXsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLX0KLQotdm9p
ZCBIZWFwVGltZXI6OmludmFsaWRhdGUoKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1
bGVUaW1lcihkb3VibGUpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17
Ci19Ci0jZW5kaWYKLSAgICAKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI0NzFm
NjBkYjhjNjM3NGM1NTAxOThkMGJlOWUyZmNjYThhNmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBU
aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNp
bmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEpTTG9jazsKLWNsYXNzIFZNOwotCi1jbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8SGVhcFRpbWVyPiB7Ci1wdWJsaWM6Ci0gICAgSGVhcFRpbWVyKFZN
Kik7Ci0jaWYgVVNFKENGKQotICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BU
aW1lclJlZiwgdm9pZCopOwotI2VuZGlmCi0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKLQotICAg
IHZvaWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIHZvaWQg
Y2FuY2VsVGltZXIoKTsKLSAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NjaGVkdWxlZDsgfQotCi0jaWYgVVNFKENGKQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYpOwotI2VuZGlmIC8vIFVTRShDRikKLSAgICAKLXByb3Rl
Y3RlZDoKLSAgICBWTSogbV92bTsKLQotICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLSAg
ICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMg
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
VGltZXJSZWY+IG1fdGltZXI7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29w
OwotICAgIAotICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7Ci0KLSAgICBMb2Nr
IG1fc2h1dGRvd25NdXRleDsKLSNlbGlmIFVTRShHTElCKQotICAgIHN0YXRpYyBjb25zdCBsb25n
IHNfZGVjYWRlOwotICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7Ci0gICAgR1JlZlB0cjxHU291cmNl
PiBtX3RpbWVyOwotI2VuZGlmCi0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgaW52YWxpZGF0ZSgp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2
MzU2Njk0MTFlMTdkYzBhYzUyLi44Y2JmYTllODA0MGRjNjFlZmIwMTliMjE0NTU0NDU1ZTJmYTgz
MWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5jcHAKQEAgLTQxLDExICs0MSwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGlt
ZU11bHRpcGxpZXIgPSAxLjAgLyBzd2VlcFRpbWVUb3RhbDsKIAogdm9pZCBJbmNyZW1lbnRhbFN3
ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQogewotICAgIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihz
d2VlcFRpbWVTbGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOworICAgIEJhc2U6OnNjaGVkdWxl
VGltZXIoc3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKIH0KIAogSW5jcmVt
ZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBU
aW1lcihoZWFwLT52bSgpKQorICAgIDogQmFzZShoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50
QWxsb2NhdG9yKG51bGxwdHIpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCmluZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3Yzc4OWE2
YWUxMTk4MDNiZTYuLjc2ZDQ1NGYzYzA0YjMxYmQxMTRiODA3MTQzZTRkMWUxNWE0ZTViYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgi
CisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IEhlYXA7CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAKLWNsYXNzIEluY3JlbWVudGFsU3dlZXBl
ciA6IHB1YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGlj
IEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNSdW5Mb29wVGlt
ZXI7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW5jcmVtZW50YWxTd2VlcGVyKEhl
YXAqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTd2VlcGluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CmluZGV4IDZlMzE3NmMyY2M3NmI2ODQ0YzNhZmViMDczYzZiY2ExM2Y0NWQzY2MuLjk0MGQzOWRl
MjRhY2ZkMzJkOTZhNGFjMjFlZDJjMmE1MzE3YzIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNz
YXJ5VGltZXIoVk0qIHZtKQotICAgIDogSGVhcFRpbWVyKHZtKQorICAgIDogQmFzZSh2bSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmgKaW5kZXggYTY4MzE4NDc0ODljODZjMzZiNjg5ZTE4ZGEwNDg2M2ExZTRlZTQ0NS4uZTE4
MzZhMTRjOGVkNTJhMjU4ZjQ2MjA3MjM1YjA1NGI5Y2EyYWVhYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCkBAIC0yNSwxNCArMjUs
MTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRl
ICJKU1J1bkxvb3BUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAot
Y2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIFN0
b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSlNSdW5Mb29wVGltZXI7CiAgICAgZXhwbGljaXQgU3RvcElmTmVjZXNz
YXJ5VGltZXIoVk0qKTsKICAgICAKICAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oCmluZGV4IDZiODE5N2M2ODY2YTA1
OTk1YjMyYTg4YmU3OTQxZGQwZmQxYjkwYTYuLjIwNWZiMDRmYjY5MTQ3ZDhmZDVlNzJhZTEwYTAz
MmQ1MWUxM2Q5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVz
LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAppbmRleCBhZDRhMzE0MDhhNmIzNWIyOWQzYzU0YjkxYTM2OTBlNWU1MDEwYTQ3
Li5kZDZjYWZkMDc3ZmRhMTJhNWJhYzM0OWMyZTVjOTU1MDc2NjdiYTk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiUGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ1Byb2ZpbGVyLmgiCkBAIC03Myw4ICs3NCw5IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5l
clV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21X
b3JrbGlzdC5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNs
dWRlIDxzdGRpby5oPgpAQCAtOTA3LDggKzkwOSw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRH
ZXR0ZXJDb21wbGV4OjpzX2luZm8gPSB7ICJET01KSVRHZXR0ZXJDb21wbGV4IiwgJkJhc2U6OnNf
CiBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUpJ
VEZ1bmN0aW9uT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShET01KSVRGdW5jdGlvbk9iamVjdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJy
YXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogY29uc3QgQ2xhc3NJbmZvIFNpbXBs
ZU9iamVjdDo6c19pbmZvID0geyAiU2ltcGxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShTaW1wbGVPYmplY3QpIH07Ci1zdGF0aWMgYm9vbCB0ZXN0
MjYyQXN5bmNQYXNzZWQgeyBmYWxzZSB9Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jVGVzdCB7
IGZhbHNlIH07CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0UGFzc2VzIHsgMCB9Oworc3RhdGlj
IHVuc2lnbmVkIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzIHsgMCB9OwogCiBFbGVtZW50SGFuZGxl
T3duZXIqIEVsZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsKQEAgLTEwNzcsNiArMTA3OSw4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxl
clN0YWNrVHJhY2VzKEV4ZWNTdGF0CiAjZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdFN0YXJ0KEV4ZWNTdGF0
ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rl
c3RQYXNzZWQoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKEV4ZWNTdGF0ZSopOwpAQCAtMTM0OSw2ICsxMzUzLDkgQEAgcHJvdGVjdGVkOgogCiAgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAibWF4QXJndW1lbnRzIiwgZnVuY3Rpb25NYXhBcmd1bWVudHMs
IDApOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXN5bmNUZXN0U3RhcnQiLCBmdW5jdGlv
bkFzeW5jVGVzdFN0YXJ0LCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RQ
YXNzZWQiLCBmdW5jdGlvbkFzeW5jVGVzdFBhc3NlZCwgMSk7CisKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMi
LCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAtMTczMiwx
MSArMTczOSwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjU3Rh
dGUqIGV4ZWMsIEZJTEUqIG91dCkKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICh0ZXN0MjYyQXN5bmNU
ZXN0KSB7CisgICAgaWYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5n
KCkgJiYgV1RGOjplcXVhbChhc1N0cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRl
c3QyNjI6QXN5bmNUZXN0Q29tcGxldGUiKSkKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Bhc3Nl
ZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFs
dWUpLT52YWx1ZShleGVjKS5pbXBsKCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpIHsK
KyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlcysrOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtMzA0
OSw2ICszMDU3LDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhB
cmd1bWVudHMoRXhlY1N0YXRlKikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KEpTQzo6bWF4QXJndW1lbnRzKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Bc3luY1Rlc3RTdGFydChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1ZhbHVlIG51bWJlck9mQXN5bmNQYXNzZXMgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAg
ICBpZiAoIW51bWJlck9mQXN5bmNQYXNzZXMuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFeHBlY3RlZCBmaXJzdCBhcmd1
bWVudCB0byBhIHVpbnQzMiIpKTsKKworICAgIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzICs9IG51
bWJlck9mQXN5bmNQYXNzZXMuYXNVSW50MzIoKTsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZp
bmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rl
c3RQYXNzZWQoRXhlY1N0YXRlKikKK3sKKyAgICBhc3luY1Rlc3RQYXNzZXMrKzsKKyAgICByZXR1
cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
IHN0YXRpYyBDU3RyaW5nIHZhbHVlV2l0aFR5cGVPZldhc21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSB3YXNtVmFsdWUpCkBAIC0zMTU5LDIxICsz
MTg2LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVz
dFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsgMikKICAgICAgICAgQ1JBU0goKTsKIAotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2UtPnZlY3Rvcigp
KSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgcGxhbi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWls
ZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBs
YW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291cmNlLT52ZWN0b3Io
KSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206OlBsYW46OkZ1bGxDb21waWxlLCBXYXNtOjpQbGFu
Ojpkb250RmluYWxpemUpKTsKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxh
bi5jb3B5UmVmKCkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3lu
Y2hyb25vdXNseShwbGFuLmdldCgpKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFuLT5lcnJvck1lc3Nh
Z2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgaWYgKHBsYW4uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKKyAgICBpZiAocGxhbi0+aW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0goKTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
a2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7
Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXplQ2FsbGVlcygKICAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0g
MSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChqc0VudHJ5
cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMjA5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUq
IGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjYWxsZWVJbmRleDsKICAgICAgICAgICAg
IH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9u
ID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1v
ZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMzY2Niw3ICszNjk0LDcgQEAgdm9pZCBDb21tYW5k
TGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXN0MjYyLWFzeW5jIikpIHsKLSAgICAgICAg
ICAgIHRlc3QyNjJBc3luY1Rlc3QgPSB0cnVlOworICAgICAgICAgICAgYXN5bmNUZXN0RXhwZWN0
ZWRQYXNzZXMrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM3Mzgs
NDggKzM3NjYsNjQgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBjb25zdCBGdW5j
JiBmdW5jKQogICAgIFdvcmtlciB3b3JrZXIoV29ya2Vyczo6c2luZ2xldG9uKCkpOwogICAgIAog
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcigmdm0pOwotCiAgICAgaW50IHJlc3VsdDsKLSAgICBpZiAob3B0aW9ucy5t
X3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgdm0ubV9wZXJC
eXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9maWxlcjo6RGF0YWJhc2U+KHZt
KTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0Ojpj
cmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSksIG9w
dGlvbnMubV9hcmd1bWVudHMpOwotICAgIGdsb2JhbE9iamVjdC0+c2V0UmVtb3RlRGVidWdnaW5n
RW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVidWdnaW5nKTsKLSAgICBib29sIHN1Y2Nl
c3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3Rp
dmUgJiYgc3VjY2VzcykKLSAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
CisgICAgICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFByb2ZpbGVyOjpEYXRhYmFzZT4odm0pOwogCi0gICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7Ci0g
ICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAodGVzdDI2MkFzeW5jVGVzdCA9PSB0ZXN0MjYyQXN5bmNQ
YXNzZWQpID8gMCA6IDM7CisgICAgICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xv
YmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBq
c051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOworICAgICAgICBnbG9iYWxPYmplY3QtPnNl
dFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQob3B0aW9ucy5tX2VuYWJsZVJlbW90ZURlYnVnZ2luZyk7
CisgICAgICAgIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAo
b3B0aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCisgICAgICAgICAgICBydW5JbnRlcmFj
dGl2ZShnbG9iYWxPYmplY3QpOworCisgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOworICAg
IH0KKyNpZiBVU0UoQ0YpCisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnJ1blJ1bkxvb3Ao
KTsKKyNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMubV9leGl0Q29kZSkKLSAgICAgICAgcHJpbnRm
KCJqc2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsKKyAgICByZXN1bHQgPSBzdWNjZXNzICYmIChh
c3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9PSBhc3luY1Rlc3RQYXNzZXMpID8gMCA6IDM7CisKKyAg
ICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKSB7CisgICAgICAgIHByaW50ZigianNjIGV4aXRpbmcg
JWQiLCByZXN1bHQpOworICAgICAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgIT0gYXN5
bmNUZXN0UGFzc2VzKQorICAgICAgICAgICAgcHJpbnRmKCIgYmVjYXVzZSBleHBlY3RlZDogJWQg
YXN5bmMgdGVzdCBwYXNzZXMgYnV0IGdvdDogJWQgYXN5bmMgdGVzdCBwYXNzZXMiLCBhc3luY1Rl
c3RFeHBlY3RlZFBhc3NlcywgYXN5bmNUZXN0UGFzc2VzKTsKKyAgICAgICAgcHJpbnRmKCJcbiIp
OworICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSkgeworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgaWYgKCF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PnNhdmUob3B0aW9ucy5tX3Byb2ZpbGVyT3V0cHV0LnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgc2F2ZSBwcm9maWxlciBvdXRwdXQuXG4iKTsK
ICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25G
dXp6KCkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAl
dSBjaGVja3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgYm9vbCBm
aXJlQXRFbmFibGVkID0KLSAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFmdGVyKCk7
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmly
ZUF0RW5hYmxlZCB8fCBPcHRpb25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkp
KQotICAgICAgICBwcmludGYoIkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5jb3Vu
dGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVj
a3MoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKLSAgICAgICAgcHJp
bnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIs
IG51bWJlck9mU3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7Ci0gICAgICAgIHByaW50ZigiSlND
IE9TUiBFWElUIEZVWlo6IGVuY291bnRlcmVkICV1IGR5bmFtaWMgY2hlY2tzLlxuIiwgbnVtYmVy
T2ZPU1JFeGl0RnV6ekNoZWNrcygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBpbGVUaW1lU3Rh
dHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGls
ZVRpbWVLZXlzOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQotICAg
ICAgICBjb21waWxlVGltZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgc3RkOjpzb3J0KGNv
bXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOwotICAgIGZvciAo
Q1N0cmluZyBrZXkgOiBjb21waWxlVGltZUtleXMpCi0gICAgICAgIHByaW50ZigiJTQwczogJS4z
bGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VFeGNlcHRpb25GdXp6KCkpCisgICAgICAgICAgICBwcmludGYoIkpTQyBFWENFUFRJT04gRlVa
WjogZW5jb3VudGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tz
KCkpOworICAgICAgICBib29sIGZpcmVBdEVuYWJsZWQgPQorICAgICAgICBPcHRpb25zOjpmaXJl
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6QXRPckFmdGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9z
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVY
RUNVVEFCTEUgQUxMT0NBVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1i
ZXJPZkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElU
IEZVWlo6IGVuY291bnRlcmVkICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09T
UkV4aXRGdXp6Q2hlY2tzKCkpOworICAgICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVa
WjogZW5jb3VudGVyZWQgJXUgZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6
Q2hlY2tzKCkpOworICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29tcGlsZVRp
bWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpOworICAgICAgICBWZWN0b3I8Q1N0cmlu
Zz4gY29tcGlsZVRpbWVLZXlzOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tcGlsZVRp
bWVTdGF0cykKKyAgICAgICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsK
KyAgICAgICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtl
eXMuZW5kKCkpOworICAgICAgICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlzKQor
ICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGls
ZVRpbWVTdGF0cy5nZXQoa2V5KSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6
Z2NBdEVuZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2VEZWZlcnJlZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5jcHAKaW5kZXggNjk2N2UwM2FmZTE1NDI0NGQxZTJkMGNiMDNhNDYxMDg5
NDA1MDFkNS4uMWRhMDYwMWY4OTc4ZTEwZmY4OTNjYTMxZTFiM2U4ZmJkZDI1MmM2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk5
LDExICsxMDAsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIEpTVmFsdWUgdmFsdWUKIHZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNh
bGxGdW5jdGlvbihleGVjLCBtX3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1Bl
bmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJv
bWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0g
bV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlYXNvbikKIHsKICAgICBjYWxsRnVuY3Rp
b24oZXhlYywgbV9yZWplY3QuZ2V0KCksIHJlYXNvbik7CisgICAgYm9vbCB3YXNQZW5kaW5nID0g
ZXhlYy0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhp
cyk7CisgICAgQVNTRVJUX1VOVVNFRCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlz
ZUlzQXN5bmNQZW5kaW5nKTsKIH0KIAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiByZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCAyNmY0YTgyZDA4Y2EwMjIw
ZWRkNTE5Njg1Mjk4MjJiY2FiOWFjNmZkLi4wOTIyYTk0ZDkzM2NjZWM1OWE0YTE3ZmNiZDIyYzM3
MjNkYTUwY2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZURlZmVycmVkLmgKQEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIHByb21pc2VBc3luY1BlbmRpbmcoKSB7IG1fcHJvbWlzZUlzQXN5bmNQ
ZW5kaW5nID0gdHJ1ZTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2VEZWZl
cnJlZChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09i
amVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwpAQCAtNjQsNiArNjgsMTAgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBKU1Byb21pc2VEZWZlcnJlZChWTSYpOwogCisjaWZuZGVmIE5ERUJVRwor
ICAgIGJvb2wgbV9wcm9taXNlSXNBc3luY1BlbmRpbmcgeyBmYWxzZSB9OworI2VuZGlmCisKICAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fcHJvbWlzZTsKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9yZXNvbHZlOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlamVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZmMxMzkxYTY2MjZiMzg4ZjE0ZTE4MmM3MmFhZTNjZTZiNzZlODQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9v
cFRpbWVyLmgiCisKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoR0xJQikKKyNp
bmNsdWRlIDxnbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0Yp
CisKK2NvbnN0IENGVGltZUludGVydmFsIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICog
NjAgKiAyNCAqIDM2NSAqIDEwOworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0q
IHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKK3sK
KyAgICBzZXRSdW5Mb29wKHZtLT5oZWFwLnJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29w
VGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCit7CisgICAgaWYgKG1fcnVu
TG9vcCkgeworICAgICAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1f
dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgIENGUnVuTG9vcFRp
bWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7
CisgICAgICAgIG1fdGltZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAocnVuTG9vcCkgewor
ICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwg
MCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkpOworICAgICAgICBtX2NvbnRleHQuaW5m
byA9IHRoaXM7CisgICAgICAgIG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNh
ZGUsIHNfZGVjYWRlLCAwLCAwLCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250
ZXh0KSk7CisgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1l
ci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICB9Cit9CisKK0pTUnVuTG9vcFRp
bWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIHNldFJ1bkxvb3AoMCk7Cit9CisKK3ZvaWQg
SlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29u
dGV4dFB0cikKK3sKKyAgICBKU1J1bkxvb3BUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxKU1J1
bkxvb3BUaW1lcio+KGNvbnRleHRQdHIpOworICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsK
KworICAgIFJlZlB0cjxWTT4gdm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOworICAgIGlmICgh
dm0pIHsKKyAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KKyAgICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0uZ2V0KCkpOworICAgICAgICB0aW1lci0+ZG9Xb3JrKCk7CisgICAgfQorCisgICAgdGltZXIt
Pm1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0
TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsg
aW50ZXJ2YWxJblNlY29uZHMpOworICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOworfQorCit2b2lk
IEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXRO
ZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBz
X2RlY2FkZSk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorCisjZWxpZiBVU0UoR0xJ
QikKKworY29uc3QgbG9uZyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQg
KiAzNjUgKiAxMDsKKworc3RhdGljIEdTb3VyY2VGdW5jcyBKU1J1bkxvb3BUaW1lclNvdXJjZUZ1
bmN0aW9ucyA9IHsKKyAgICBudWxscHRyLCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwgLy8gY2hl
Y2sKKyAgICAvLyBkaXNwYXRjaAorICAgIFtdKEdTb3VyY2UqLCBHU291cmNlRnVuYyBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCisgICAgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxpemUKKyAg
ICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9t
YXJzaGFsbAorfTsKKworSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKyAg
ICA6IG1fdm0odm0pCisgICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCisgICAgLCBtX3Rp
bWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJkpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25z
LCBzaXplb2YoR1NvdXJjZSkpKSkKK3sKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdl
dCgpLCAiW0phdmFTY3JpcHRDb3JlXSBKU1J1bkxvb3BUaW1lciIpOworICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xl
YW4geworICAgICAgICBhdXRvJiBydW5Mb29wVGltZXIgPSAqc3RhdGljX2Nhc3Q8SlNSdW5Mb29w
VGltZXIqPih1c2VyRGF0YSk7CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHJ1bkxv
b3BUaW1lci5tX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSlNSdW5Mb29w
VGltZXI6OnNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBydW5Mb29wVGltZXIu
dGltZXJEaWRGaXJlKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9
LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19t
YWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworfQorCitKU1J1bkxvb3BUaW1lcjo6
fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkp
OworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoKQoreworICAgIG1fYXBp
TG9jay0+bG9jaygpOworCisgICAgaWYgKCFtX2FwaUxvY2stPnZtKCkpIHsKKyAgICAgICAgLy8g
VGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAg
ICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsKKyAgICAgICAgZG9Xb3JrKCk7
CisgICAgfQorCisgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BU
aW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVs
ZWQgPSB0cnVlOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cisg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rvbmlj
X3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVsZWQg
PSBmYWxzZTsKK30KKyNlbHNlCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZt
KQorICAgIDogbV92bSh2bSkKK3sKK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1l
cigpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUoKQoreworfQorCit2
b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKK3sKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworfQorI2VuZGlmCisgICAgCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgzZWNiOWNiYzQzYjgwZDMxZWY4YjZiMDQ5YzE3ZWY1YWM0ZmNi
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1
bkxvb3BUaW1lci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
TG9jazsKK2NsYXNzIFZNOworCitjbGFzcyBKU1J1bkxvb3BUaW1lciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxKU1J1bkxvb3BUaW1lcj4geworcHVibGljOgorICAgIEpTUnVuTG9vcFRp
bWVyKFZNKik7CisjaWYgVVNFKENGKQorICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1
bkxvb3BUaW1lclJlZiwgdm9pZCopOworI2VuZGlmCisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5KU1J1bkxvb3BUaW1lcigpOworICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7
CisKKyAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKKyAg
ICB2b2lkIGNhbmNlbFRpbWVyKCk7CisgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTY2hlZHVsZWQ7IH0KKworI2lmIFVTRShDRikKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKKyNlbmRpZiAvLyBVU0UoQ0YpCisKK3By
b3RlY3RlZDoKKyAgICBWTSogbV92bTsKKworICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsK
KyAgICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OworI2lmIFVTRShDRikKKyAgICBzdGF0
aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7CisKKyAgICBSZXRhaW5QdHI8Q0ZSdW5M
b29wVGltZXJSZWY+IG1fdGltZXI7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5M
b29wOworCisgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIExvY2sg
bV9zaHV0ZG93bk11dGV4OworI2VsaWYgVVNFKEdMSUIpCisgICAgc3RhdGljIGNvbnN0IGxvbmcg
c19kZWNhZGU7CisgICAgdm9pZCB0aW1lckRpZEZpcmUoKTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fdGltZXI7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKaW5kZXggZGE5OTZlYWEzYzZjY2I2MGJmMTA4YjY5OTczODQyNmY3MWE0OTY3
Yy4uYTBkOTEwOTBlNjJiY2RiMjY2MWMyODZkMzQ0NjcyN2M5MTUxNGU2NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtMjUyLDYgKzI1Miw3IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIG51bWJlck9mRlRMQ29t
cGlsZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDgsIDIpIC0gMSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJU
aHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZkZUTENvbXBpbGVyVGhy
ZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldvcmtlclRocmVhZHMoLTIsIDApLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZXYXNtQ29tcGlsZXJUaHJl
YWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVByb2ZpbGVyLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIs
IHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApAQCAtNDI4LDYgKzQyOSw5IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlQ29kZUNhY2hlLCB0cnVlLCBO
b3JtYWwsICJJZiBmYWxzZSwgdGhlIHVubGlua2VkIGJ5dGUgY29kZSBjYWNoZSB3aWxsIG5vdCBi
ZSB1c2VkLiIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9y
bWFsLCAiRXhwb3NlIHRoZSBXZWJBc3NlbWJseSBnbG9iYWwgb2JqZWN0LiIpIFwKKyAgICBcCisg
ICAgdihib29sLCBmYWlsVG9Db21waWxlV2ViQXNzZW1ibHlDb2RlLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgbm8gV2FzbTo6UGxhbiB3aWxsIHN1Y2Vzc2Z1bGx5IGNvbXBpbGUgYSBmdW5jdGlv
bi4iKSBcCisgICAgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhl
IGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmlt
dW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0
IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNt
IG1lbW9yeS4iKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9y
YWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc0YWY2OTE3OWEyYzBhYWY4NWFhYjk4YjFkYWRkMDJjODgzNzgwNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvbWlz
ZURlZmVycmVkVGltZXIuaCIKKworI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCisjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKK1Byb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcihW
TSYgdm0pCisgICAgOiBCYXNlKCZ2bSkKK3sKK30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1l
cjo6ZG9Xb3JrKCkKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7CisgICAgY2FuY2Vs
VGltZXIoKTsKKyAgICBpZiAoIW1fcnVuVGFza3MpCisgICAgICAgIHJldHVybjsKKworICAgIHdo
aWxlICghbV90YXNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHRp
Y2tldDsKKyAgICAgICAgVGFzayB0YXNrOworICAgICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2sp
ID0gbV90YXNrcy50YWtlTGFzdCgpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRG9p
bmcgd29yayBvbiBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgICAgIC8v
IFdlIG1heSBoYXZlIGFscmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMuCisgICAgICAgIGlm
IChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyh0aWNrZXQpKSB7CisgICAgICAgICAgICB0YXNr
KCk7CisgICAgICAgICAgICBtX3ZtLT5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gd2FpdGluZ1Rhc2tzID0gbV9ibG9ja2VkVGFza3MudGFrZSh0aWNrZXQpOwor
ICAgICAgICBmb3IgKGNvbnN0IFRhc2smIHVuYmxvY2tlZFRhc2sgOiB3YWl0aW5nVGFza3MpIHsK
KyAgICAgICAgICAgIHVuYmxvY2tlZFRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWlj
cm90YXNrcygpOworICAgICAgICB9CisgICAgfQorCisjaWYgVVNFKENGKQorICAgIGlmIChtX3Bl
bmRpbmdQcm9taXNlcy5pc0VtcHR5KCkgJiYgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9t
aXNlc0ZpbmlzaCkKKyAgICAgICAgQ0ZSdW5Mb29wU3RvcChtX3J1bkxvb3AuZ2V0KCkpOworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoQ0YpCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpydW5SdW5M
b29wKCkKK3sKKyAgICBBU1NFUlQoIW1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOworICAgIEFTU0VSVChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KTsKKyAgICBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFByb21pc2VzRmluaXNoID0gdHJ1ZTsK
KyAgICBpZiAobV9wZW5kaW5nUHJvbWlzZXMuc2l6ZSgpKQorICAgICAgICBDRlJ1bkxvb3BSdW4o
KTsKK30KKyNlbmRpZgorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJv
bWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYg
ZGVwZW5kZW5jaWVzKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLnNp
emUoKTsgKytpKQorICAgICAgICBBU1NFUlQoZGVwZW5kZW5jaWVzW2ldLmdldCgpICE9IHRpY2tl
dCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZCh0aWNrZXQsIFZl
Y3RvcjxTdHJvbmc8SlNDZWxsPj4oKSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJBZGRpbmcgbmV3IHBlbmRpbmcgcHJvbWlzZTog
IiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKKyAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJv
bmc8SlNDZWxsPigqbV92bSwgdGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBXVEZNb3ZlKGRlcGVuZGVuY2llcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgZGVwZW5kZW5jaWVzIGZvciBwcm9taXNlOiAiLCBS
YXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZFZlY3RvcihkZXBlbmRlbmNpZXMpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB0aWNr
ZXQtPnByb21pc2VBc3luY1BlbmRpbmcoKTsKKyNlbmRpZgorfQorCitib29sIFByb21pc2VEZWZl
cnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0
KQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
KyAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZSh0aWNrZXQpOworCisg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkNhbmNlbGluZyBw
cm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgYXV0byBibG9ja2VkVGFza3Mg
PSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7CisgICAgZm9yIChjb25zdCBUYXNrJiB0YXNr
IDogYmxvY2tlZFRhc2tzKQorICAgICAgICB0YXNrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVXb3JrU29vbihKU1Byb21pc2VE
ZWZlcnJlZCogdGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3Rhc2tMb2NrKTsKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUodGlja2V0LCBX
VEZNb3ZlKHRhc2spKSk7CisgICAgaWYgKCFpc1NjaGVkdWxlZCgpKQorICAgICAgICBzY2hlZHVs
ZVRpbWVyKDApOworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZUJsb2Nr
ZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiBibG9ja2luZ1RpY2tldCwgVGFzayYmIHRhc2spCit7
CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAg
IEFTU0VSVChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyhibG9ja2luZ1RpY2tldCkpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9ibG9ja2VkVGFza3MuYWRkKGJsb2NraW5nVGlja2V0LCBWZWN0b3I8
VGFzaz4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZSh0YXNr
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2MzYzMzZWI4
NzJkZTAwN2QzYWYxZmRhOGFlYjA3Zjk1MDQ0NDkzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKyNpbmNsdWRlICJTdHJv
bmcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTUHJv
bWlzZURlZmVycmVkOworY2xhc3MgVk07CitjbGFzcyBKU0NlbGw7CisKK2NsYXNzIFByb21pc2VE
ZWZlcnJlZFRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNSdW5Mb29wVGltZXI7CisKKyAgICBQcm9taXNlRGVmZXJyZWRUaW1lcihWTSYp
OworCisgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkUGVuZGluZ1By
b21pc2UoSlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5k
ZW5jaWVzKTsKKyAgICAvLyBKU1Byb21pc2VEZWZlcnJlZCBzaG91bGQgaGFuZGxlIGNhbmNlbGlu
ZyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAgIGJvb2wgY2Fu
Y2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqKTsKKworICAgIHR5cGVkZWYgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IFRhc2s7CisgICAgdm9pZCBzY2hlZHVsZVdvcmtTb29uKEpTUHJv
bWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAgIC8vIEJsb2NrZWQgdGFza3Mgc2hvdWxkIG9u
bHkgYmUgcmVnaXN0ZXJlZCB3aGlsZSBob2xkaW5nIHRoZSBKUyBBUEkgbG9jay4gSWYgd2UgZGlk
bid0IHJlcXVpcmUgaG9sZGluZyB0aGUKKyAgICAvLyBKUyBBUEkgbG9jayB0aGVuIHRoZXJlIG1p
Z2h0IGJlIGEgcmFjZSB3aGVyZSB0aGUgcHJvbWlzZSB5b3UgYXJlIHdhaXRpbmcgb24gaXMgcnVu
IGJlZm9yZSB5b3VyIHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVkLgorICAgIHZvaWQgc2NoZWR1
bGVCbG9ja2VkVGFzayhKU1Byb21pc2VEZWZlcnJlZCosIFRhc2smJik7CisKKyAgICB2b2lkIHN0
b3BSdW5uaW5nVGFza3MoKSB7IG1fcnVuVGFza3MgPSBmYWxzZTsgfQorI2lmIFVTRShDRikKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blJ1bkxvb3AoKTsKKyNlbmRpZgorCitwcml2YXRl
OgorICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBMb2NrIG1fdGFza0xvY2s7CisgICAgYm9vbCBtX3J1
blRhc2tzIHsgdHJ1ZSB9OworI2lmIFVTRShDRikKKyAgICBib29sIG1fc2hvdWxkU3RvcFJ1bkxv
b3BXaGVuQWxsUHJvbWlzZXNGaW5pc2ggeyBmYWxzZSB9OworI2VuZGlmCisgICAgVmVjdG9yPHN0
ZDo6dHVwbGU8SlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrPj4gbV90YXNrczsKKyAgICBIYXNoTWFw
PEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFRhc2s+PiBtX2Jsb2NrZWRUYXNrczsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4
IDg1MTE1NDJiNzdkZmM4ZTZmMmJlYWJmMWY4OTNjNzczOWFiNzRiMzguLmZlZTBiMzM5ZWYyNTcy
YTVhZWQxMWRiODZhMTExNGM0NDZhMTliN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQ
cm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgpAQCAtMTAzLDYgKzEwNCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1
ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vh
a0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCkBAIC0xNzcsNiArMTc5
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY2xp
ZW50RGF0YSgwKQogICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxs
RnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIo
c3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9h
dG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEoKS5hdG9t
aWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0cmluZ1RhYmxlKQogICAgICwgcHJvcGVydHlO
YW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQpAQCAtMzU2LDYgKzM1
OSwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAKIFZNOjp+
Vk0oKQogeworICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmluZ1Rhc2tzKCk7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChXYXNtOjpleGlzdGluZ1dvcmtsaXN0T3JO
dWxsKCkpCisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yVk0o
KnRoaXMpOworI2VuZGlmCiAgICAgaWYgKFVOTElLRUxZKG1fd2F0Y2hkb2cpKQogICAgICAgICBt
X3dhdGNoZG9nLT53aWxsRGVzdHJveVZNKHRoaXMpOwogICAgIG1fdHJhcHMud2lsbERlc3Ryb3lW
TSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOWQ4NmFhMTlhOTMzY2VhMzhh
YjVmMDIzMTg0NDU5Y2I2MDEwZjNiNy4uODFiODJlOTlhOTRkZWRiM2MzYTFjN2MyNjM2OWY2YmMy
ZjIwOTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDcg
QEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOworY2xhc3MgUHJv
bWlzZURlZmVycmVkVGltZXI7CiBjbGFzcyBSZWdFeHBDYWNoZTsKIGNsYXNzIFJlZ2lzdGVyOwog
Y2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CkBAIC0zODAsNiArMzgxLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6b25jZV9mbGFnIG1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZsYWc7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uPiBtX3dhc21TaWdu
YXR1cmVJbmZvcm1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlRGVm
ZXJyZWRUaW1lcj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAgICAgCiAgICAgSlNDZWxsKiBjdXJy
ZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwogICAgIGNvbnN0IENsYXNzSW5mbyogY3Vy
cmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENsYXNzSW5mbzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKaW5kZXggZmNkYzhjZGRjNGRhNjhkZDlk
Y2UxOTkwZDlkOTkxMmVkZDI5ZDY2OC4uNzUxNmQxMGJjMTFhZGZmNWJkMjQwNzZiNDEyNmViMzQ1
Y2ZiZDZmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5j
cHAKQEAgLTMzLDEwICszMywxNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
UHJvbWlzZURlZmVycmVkVGltZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKK3VzaW5nIEpTQzo6V2FzbTo6UGxhbjsK
KwogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShKU1dlYkFzc2VtYmx5KTsKQEAgLTQ1LDQ1ICs1MiwxNjAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUq
KTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWplY3QoRXhlY1N0YXRl
KiBleGVjLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZSkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OworICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gY2F0Y2hTY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIEpTUHJv
bWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAg
ICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2Ci0gICAgSlNWYWx1ZSBtb2R1
bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlN
b2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hT
Y29wZS5leGNlcHRpb24oKSkgewotICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfQor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVz
OworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9iamVj
dCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9t
aXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9w
dFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHBy
b21pc2UsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAgICBSZWZQdHI8
UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURlZmVy
cmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJvbWlzZSwgZ2xv
YmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1ZhbHVlIG1vZHVsZSA9IEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1i
bHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKHBsYW4pKTsKKyAg
ICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogCi0gICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICAg
ICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICB9KTsKKyAgICB9KSk7
CisKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQogCitlbnVt
IGNsYXNzIFJlc29sdmUgeyBXaXRoSW5zdGFuY2UsIFdpdGhNb2R1bGVBbmRJbnN0YW5jZSB9Owor
c3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlv
bih2bSwgZXhlYyk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZW50cmllcyA9PSBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpCisgICAgICAgIHByb21pc2UtPnJl
c29sdmUoZXhlYywgaW5zdGFuY2UpOworICAgIGVsc2UgeworICAgICAgICBKU09iamVjdCogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJtb2R1bGUi
KSksIG1vZHVsZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5jZSIpKSwgaW5zdGFuY2UpOworICAg
ICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWxseSByZWNv
bXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgZ2F0aGVyIGFsbCB0aGUgaW1wb3J0L21lbW9yeSBp
bmZvcm1hdGlvbiBwcmlvciB0byBjb21waWxpbmcgY29kZS4KKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMs
IG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7
CisgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXM6CisgICAgLy8g
MSkgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGluaXRpYWxpemVkIENvZGVCbG9jaywgc28g
d2UgaGF2ZSBubyBtb3JlIHdvcmsgdG8gZG8uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBu
byBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUg
Zm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxp
emVkIENvZGVCbG9jaywgc28gc29tZW9uZSBlbHNlIGlzIGNvbXBpbGluZyBjb2RlIGFuZCB3ZSBq
dXN0IG5lZWQgdG8gd2FpdCBmb3IgdGhlbS4KKworICAgIGlmIChpbnN0YW5jZS0+aW5pdGlhbGl6
ZWQoKSkgeworICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9k
dWxlLCBlbnRyaWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTdHJv
bmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIC8vIFRoZSBpbnN0YW5jZSBrZWVwcyB0aGUg
bW9kdWxlIGFsaXZlLgorICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0s
IGluc3RhbmNlKSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9t
aXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBpZiAoaW5zdGFuY2Ut
PmNvZGVCbG9jaygpKSB7CisgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVs
ZUJsb2NrZWRUYXNrKGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cGxhbigpLnBlbmRpbmdQcm9taXNl
KCksIFsmdm0sIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdICgpIHsKKyAgICAg
ICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
ZW50cmllcyk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VS
VCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHJlcGFyc2Vz
IHRoZSBtb2R1bGUgaGVhZGVyLCB3aGljaCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgorICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgpLCBQ
bGFuOjpGdWxsQ29tcGlsZSwgW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdIChQ
bGFuJiBwKSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAg
ICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9t
aXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllcywgcGxhbiA9IFdURk1vdmUo
cGxhbildICgpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKKyAgICAgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1
bGUsIGVudHJpZXMpOworICAgICAgICB9KTsKKyAgICB9KSk7CisKKyAgICBpbnN0YW5jZS0+YWRk
VW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsKKyAgICBwbGFuLT5zZXRN
b2RlQW5kUHJvbWlzZShpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBwcm9taXNlKTsKKyAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2
bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOworCisg
ICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisg
ICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgZGVwZW5kZW5jaWVz
LmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2JqZWN0KSk7CisgICAgdm0ucHJvbWlz
ZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5k
ZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwg
KnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3NvdXJjZSwgcHJvbWlzZSwgaW1wb3J0T2JqZWN0
LCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+
IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRp
bWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtzb3VyY2UsIHByb21pc2UsIGltcG9ydE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBn
bG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUoc291cmNl
KSwgcGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc3RhbnRpYXRl
KHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0aE1v
ZHVsZUFuZEluc3RhbmNlKTsKKyAgICAgICAgfSk7CisgICAgfSkpOworCisgICAgV2FzbTo6ZW5z
dXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworfQorCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBBUEkgdHJ1
bHkgYXN5bmNocm9ub3VzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY5MTg3Ci0KICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgYXV0
byByZWplY3QgPSBbJl0gKCkgewotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNo
U2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOwotICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVj
LCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHBy
b21pc2UtPnByb21pc2UoKSk7Ci0gICAgfTsKLQogICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQg
PSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0gaW1wb3J0
QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVmaW5l
ZCgpICYmICFpbXBvcnRPYmplY3QpIHsKQEAgLTkzLDI5ICsyMTUsMTAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgfQogCiAgICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQo
MCk7Ci0gICAgSlNWYWx1ZSBtb2R1bGU7Ci0gICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNNb2R1bGUg
PSBmYWxzZTsKLSAgICBpZiAoZmlyc3RBcmd1bWVudC5pbmhlcml0cyh2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZTo6aW5mbygpKSkgewotICAgICAgICBmaXJzdEFyZ3VtZW50SXNNb2R1bGUgPSB0cnVl
OwotICAgICAgICBtb2R1bGUgPSBmaXJzdEFyZ3VtZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVj
LCBmaXJzdEFyZ3VtZW50LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
TW9kdWxlU3RydWN0dXJlKCkpOwotICAgICAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgICAgIHJldHVybiByZWplY3QoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlID0gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVh
dGVJbnN0YW5jZShleGVjLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KG1vZHVsZSksIGlt
cG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3Rh
bmNlU3RydWN0dXJlKCkpOwotICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gcmVqZWN0KCk7Ci0KLSAgICBpZiAoZmlyc3RBcmd1bWVudElzTW9kdWxlKQotICAg
ICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJ
TGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFuY2UiKSks
IGluc3RhbmNlKTsKLSAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1bHQpOwotICAg
IH0KKyAgICBpZiAoYXV0byogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9k
dWxlKj4odm0sIGZpcnN0QXJndW1lbnQpKQorICAgICAgICBpbnN0YW50aWF0ZSh2bSwgZXhlYywg
cHJvbWlzZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhJbnN0YW5jZSk7Cisg
ICAgZWxzZQorICAgICAgICBjb21waWxlQW5kSW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2Us
IGZpcnN0QXJndW1lbnQsIGltcG9ydE9iamVjdCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9CkBAIC0xMjksNyArMjMyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVm
ZmVyRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAg
ICBXYXNtOjpQbGFuIHBsYW4odm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgUGxhbjo6
VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQg
d2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29t
ZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFu
LnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IGZlOGMzZjNiYTIwYTZmZTY4
MTVlYjE0NDBhNTdmYmRjMjI5YmZkOWMuLjA4YWJkYmMwMjFiODE4YzM5NTU5NjE2OWExY2RhMjQ1
ZGU5OGU1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTQ2VsbC5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVm
ZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtMzksMTQgKzQwLDE4
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIEpT
V2ViQXNzZW1ibHlNZW1vcnk7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47Cit9CisK
IGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
IAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlua0luZm9z
LCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiBleGl0U3R1YnMsIFdhc206Ok1lbW9yeU1v
ZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBXYXNt
OjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNtOjpQbGFuPiYmIHBsYW4sIHVuc2lnbmVkIGNhbGxl
ZUNvdW50KQogICAgIHsKLSAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUo
Y2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIHN0ZDo6Zm9y
d2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2FyZDxWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxlZUNvdW50KTsK
KyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJB
c3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdURk1vdmUocGxhbiksIGNh
bGxlZUNvdW50KTsKICAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNTksNyArNjQsMTYgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21FeGl0U3R1
YnMuc2l6ZSgpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLSAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlN
ZW1vcnkqKTsKKworICAgIC8vIERvbid0IGNhbGwgaW50aWFsaXplIGRpcmVjdGx5LCB0aGlzIHNo
b3VsZCBiZSBjYWxsZWQgZm9yIHlvdSwgYXMgbmVlZGVkLCBieSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmZpbmFsaXplQ3JlYXRpb24uCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgYm9vbCBp
bml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BsYW47IH0KKworICAgIFdhc206OlBsYW4m
IHBsYW4oKSBjb25zdCB7IEFTU0VSVCghaW5pdGlhbGl6ZWQoKSk7IHJldHVybiAqbV9wbGFuOyB9
CisKKyAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiAh
bV9lcnJvck1lc3NhZ2U7IH0KKyAgICBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIHsgQVNTRVJUKCFy
dW5uYWJsZSgpKTsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CisgICAgYm9vbCBpc1NhZmVUb1J1
bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CiAKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7CkBAIC04OSwxMCArMTAzLDcgQEAgcHVibGljOgogICAgICAg
ICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNh
bGxlZSk7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBj
YWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVy
PEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNl
dE9mQ2FsbGVlcygpKTsKLSAgICB9CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxl
ZXMoKSk7IH0KIAogICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQg
aW1wb3J0SW5kZXgpCiAgICAgewpAQCAtMTAxLDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1ibHlN
b2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4m
JiwgV2FzbTo6TWVtb3J5TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOworICAgIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgV2FzbTo6TWVtb3J5TW9k
ZSwgUmVmPFdhc206OlBsYW4+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0xMjUsNiArMTM2LDkg
QEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICAvLyBUaGUgcGxh
biB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUgYmxvY2suCisgICAgUmVmUHRyPFdhc206OlBs
YW4+IG1fcGxhbjsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgV2FzbTo6TWVtb3J5
TW9kZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggZmFjNTdh
ZGRhZjA3NGU5YThjZmU2MDYzMzM1ZjMwZGEyZTk2ZDNhMi4uYWI3MjAwZWRkNTMwNGZhMmFjYmQ0
OTlkODA1ZjNkMWQ5NmExNmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hp
bGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYpOworICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAt
MjIxLDYgKzIyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFByb2Nl
ZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3Rv
cjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMjU4LDkgKzI1OSwxMCBAQCBzdGF0aWMgdm9pZCBz
dG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVl
KiBhcmcpCiAgICAgICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZN
JiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1v
ZGUgbW9kZSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9k
ZShtb2RlKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC00ODYsNyArNDg4LDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5
QmFzZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nKSB7CisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJU
KHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBv
aW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CkBA
IC01MjIsNyArNTI0LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBl
IG9wKQogCiBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bj
b2RlIG1lbW9yeU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlN
b2RlOjpTaWduYWxpbmcpCisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcp
CiAgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7CiAgICAgcmV0dXJuIG1lbW9yeU9w
OwogfQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFw
cGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW4KICAgICBq
aXQucmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0
JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVf
dCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVT
aWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWduZWQgb3B0TGV2
ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRp
b25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5k
aWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQg
b3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xMjM2LDcgKzEyMzgsNyBAQCBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShW
TSYgdm0sCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjpt
YWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJl
OwotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQu
Z2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRl
eHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKCZ2
bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5m
bywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAyNDlkNTc4MTRh
OTI4YzRiZjkyMDZiYzg1MjU2NGMzNmM3ODg5YTRlLi5kZTU2YTFjM2IyM2M1NzA0ZmUwNTMxOWJk
MGE4NWMzMWU3N2Y5YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9p
ZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0
aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVu
dHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlN
b2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3YTY3Mjlh
NzFmYmRmMDUxNzRhMWNjYzExYTU2ZjYyNzFkY2ViYy4uNTU2OTQzNWY0MTJlNjZhNmQ3NDhjMzM1
OGJiZDE1MzUxY2U1MjI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aApAQCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3Ry
aW5nKEV4dGVybmFsS2luZCBraW5kKQogfQogCiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBJZGVudGlm
aWVyIG1vZHVsZTsKLSAgICBJZGVudGlmaWVyIGZpZWxkOworICAgIFN0cmluZyBtb2R1bGU7Cisg
ICAgU3RyaW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVkIGtp
bmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBraW5k
LgogfTsKIAogc3RydWN0IEV4cG9ydCB7Ci0gICAgSWRlbnRpZmllciBmaWVsZDsKKyAgICBTdHJp
bmcgZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWduZWQga2luZEluZGV4
OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQuCiB9OwpA
QCAtMjYwLDYgKzI2MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAg
ICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEZ1
bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy5zaXplKCk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggZjJiOTQx
MTVjYjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUzN2M3M2JhMi4uZDQyMDU2MGI3MjRlNGI0NjU1ZDI2
YWFjY2M3ZDRjZTIxYWQ0Y2E3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2FscyksICJjYW4ndCBnZXQgRnVuY3Rpb24n
cyBudW1iZXIgb2YgbG9jYWxzIGluIGdyb3VwICIsIGkpOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKG51bWJlck9mTG9jYWxzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAiLCBpLCAidGggbG9jYWwgZ3JvdXAgY291bnQgaXMg
dG9vIGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSwgImNhbid0IGdldCBGdW5jdGlvbiBsb2NhbCdz
IHR5cGUgaW4gZ3JvdXAgIiwgaSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29u
dGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgYWRkICIs
IG51bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9uIGxvY2FscyBmcm9tIGdyb3VwICIsIGkpOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVy
T2ZMb2NhbHMpKTsKICAgICB9CiAKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
Qm9keSgpKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVp
bnQzMl90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRl
eCBmb3IgZ2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4
dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2NhbCBhdCBpbmRleCIsIGlu
ZGV4KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5kZXgsIHJl
c3VsdCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJj
YW4ndCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBS
RVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKLSAgICAgICAg
cmV0dXJuIG1fY29udGV4dC5zZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBjYXNlIENhbGw6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuaAppbmRleCBkMTNkMGM2NjJmOTg5ZDNlZGU0ZTRkZTA5ZjIyNDZjYzc5NzY2
YTliLi40NGRhMGRmYzE3ODRkZGY1YzAwZDdiYjU5NDYzMDZhZTYwYTJiMjVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFZN
OwogbmFtZXNwYWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIg
bW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5
MwotZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4
X3QgewogICAgIEJvdW5kc0NoZWNraW5nLAogICAgIFNpZ25hbGluZywKICAgICBOdW1iZXJPZk1l
bW9yeU1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmNwcAppbmRleCA4YWMwODY2Mjc4YjUxMzkzYjY2OWVhMDlhN2I1NDhkNmQ5
YTc2YjE0Li41OTA5ZmUzZmU4M2MxODgyODkyNTQzNGRlNjU2YWRhYTAxNDE3NzJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKQEAgLTc0LDcgKzc0LDcgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rlcklu
Zm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0KIAotTWVt
b3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGls
ZU1vZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRp
b24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KQog
ICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAs
IG1faXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04MiwyOCArODIsNiBAQCBNZW1vcnlJbmZvcm1hdGlv
bjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdQogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCgh
ISp0aGlzKTsKLQotICAgIGlmICghcmVjb21waWxlTW9kZSkgewotICAgICAgICBpZiAoIWlzSW1w
b3J0KSB7Ci0gICAgICAgICAgICBpZiAobWF4aW11bSAmJiBtYXhpbXVtLmJ5dGVzKCkgPT0gMCkg
ewotICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwg
aW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKSk7Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11bSgpLmJ5dGVzKCkg
PT0gMCk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBN
ZW1vcnlNb2RlOjpTaWduYWxpbmcpOwotICAgICAgICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1vcnkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9yeSk7Ci0gICAgICAg
ICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX21vZGUgPSBN
ZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fbW9kZSA9
ICpyZWNvbXBpbGVNb2RlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRl
eCA2ZGUwNzBhMTA0NTJmZjZiYjNjNWMyNTA0MTFmMTBlOTEzODllNGEyLi5kMTgyYzczY2Q2NTM4
OGNhZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMjIgKzU0LDE3IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3Jt
YXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9u
KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CiAK
ICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAg
IFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgYm9v
bCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0K
LSAgICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNl
cnZlZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9Ci0gICAg
TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0lt
cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2YXRlOgotICAg
IFJlZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlh
bCB7IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5TW9kZSBtX21v
ZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7
IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1ZmQzZTRj
M2QuLmU3MzZiYmYyZjE3MzJhZTI4NDg0NGYzNGUyOTk4ODMzY2I4Njg1MjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0xNjIsMTEg
KzE2MiwxMSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVz
dWx0CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobW9kdWxl
TGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFt
ZSBsZW5ndGgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJp
bmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4pOwotICAgICAg
ICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVTdHJpbmcp
OworICAgICAgICBpbXAubW9kdWxlID0gbW9kdWxlU3RyaW5nOwogCiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUgJyIsIG1v
ZHVsZVN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVU
RjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1i
ZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4sICIgaW4g
bW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIGltcC5maWVsZCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBpbXAuZmllbGQg
PSBmaWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVy
bmFsS2luZChpbXAua2luZCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3Mga2luZCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3Ry
aW5nLCAiJyIpOwogICAgICAgICBzd2l0Y2ggKGltcC5raW5kKSB7CkBAIC0zMTYsNyArMzE2LDcg
QEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+
IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJU
KCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3Vu
dCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCpt
X3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0
KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRp
YWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9
OwogfQogCkBAIC0zNzYsNyArMzc2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0
KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1l
VVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51
bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVsZFN0cmlu
ZyksICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIGV4
cG9ydE5hbWVzLmFkZChmaWVsZFN0cmluZyk7Ci0gICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBleHAuZmllbGQgPSBm
aWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFs
S2luZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBv
cnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcs
ICInIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
aW5kZXggYzk2MThiNTdjYTQyMmYwMWZlOWY3OWY0YzE3OTUxYTBlYjZiNzUwZS4uNTBhMjg5MzVl
ZjEzZjk2MjBmYTE1Njg0MTc2YjE3ZTg0ZDY2YzJiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtNDQsOSArNDQsOSBAQCBzdHJ1Y3QgTW9k
dWxlUGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8TW9k
dWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBj
b25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKKworICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICAgICAgOiBQ
YXJzZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgICAgICAsIG1fbW9kZSht
b2RlKQogICAgIHsKICAgICB9CiAKQEAgLTY2LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50
NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9y
ZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtX21vZGUgeyBzdGQ6Om51bGxv
cHQgfTsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGI2NTQyNDkyNjQ4MTBhZmUwOWExNzA5OTUw
NGY1NjMwYmY4NjVjYzYuLjFlZDJiMmY4NTM2NTlmYTI3MmVkZGUwMTFhOThlYjYwYmM0OGViOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTQyLDcgKzQyLDYg
QEAKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNp
bmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1U
cmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTAsMzAg
KzQ5LDY1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi1QbGFuOjpQbGFuKFZNKiB2bSwgVmVjdG9y
PHVpbnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5z
aXplKCkpCisKK1BsYW46OlBsYW4oVk0mIHZtLCBBcnJheUJ1ZmZlciYgc291cmNlLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogUGxhbih2bSwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oc291cmNlLmRhdGEoKSksIHNvdXJjZS5ieXRlTGVuZ3RoKCksIHdv
cmssIFdURk1vdmUodGFzaykpCit7Cit9CisKK1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWlu
dDhfdD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAg
ICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCksIHdvcmssIFdURk1vdmUo
dGFzaykpCiB7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2Us
IHNpemVfdCBzb3VyY2VMZW5ndGgpCitQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCog
c291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRh
c2smJiB0YXNrKQogICAgIDogbV92bSh2bSkKKyAgICAsIG1fY29tcGxldGlvblRhc2sodGFzaykK
ICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0
aCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCit7Cit9CisKK2NvbnN0IGNoYXIqIFBsYW46OnN0
YXRlU3RyaW5nKFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNl
IFN0YXRlOjpJbml0aWFsOiByZXR1cm4gIkluaXRpYWwiOworICAgIGNhc2UgU3RhdGU6OlZhbGlk
YXRlZDogcmV0dXJuICJWYWxpZGF0ZWQiOworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOiByZXR1
cm4gIlByZXBhcmVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21waWxlZDogcmV0dXJuICJDb21waWxl
ZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxldGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID4gbV9zdGF0ZSk7Cisg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIm1vdmluZyB0byBzdGF0ZTogIiwgc3RhdGVTdHJpbmco
c3RhdGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKG1fc3RhdGUpKTsKKyAgICBtX3N0
YXRlID0gc3RhdGU7Cit9CisKK3ZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExvY2tlciYg
bG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOworICAgIG1fZXJyb3JN
ZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGNvbXBsZXRlKGxvY2tlcik7CiB9
CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9y
eU1vZGU+IHJlY29tcGlsZU1vZGUpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUo
KQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1l
cygpKQogICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsK
LSAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3Vy
Y2VMZW5ndGgsIHJlY29tcGlsZU1vZGUpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFy
c2VyKCZtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBhdXRvIHBhcnNl
UmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQp
IHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAg
ICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJv
cigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9t
b2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBAIC04Miw1
MiArMTE2LDQ4IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlv
bmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5LnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAi
LCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQg
ZW5kaW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5l
bmQpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBz
dGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0u
c3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVu
Y3Rpb25JbmRleF0uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9
IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3Rh
cnQ7CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1
bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9z
b3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNp
Z25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0
ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
ICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRT
aWduYXR1cmVJbmRpY2VzKTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRh
dGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSks
ICIsICIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJy
b3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25J
bmRleCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICBmYWls
KGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAi
LCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkp
OyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBv
cnRDb21waWxlVGltZXMoKSkKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNU
aW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUg
bW9kdWxlIik7CisgICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNv
bXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgIGVsc2UKKyAgICAgICAgbW92ZVRvU3RhdGUo
U3RhdGU6OlZhbGlkYXRlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFdlIGFyZSBjcmVh
dGluZyBhIGJ1bmNoIG9mIHRocmVhZHMgdGhhdCB0b3VjaCB0aGUgbWFpbiB0aHJlYWQncyBzdGFj
ay4gVGhpcyB3aWxsIG1ha2UgQVNBTiB1bmhhcHB5LgotLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9L
IGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGlu
dWUgdW50aWwgYWxsIHRocmVhZHMKLS8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBk
b25lIGV4ZWN1dGluZy4KLVNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlv
bmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUoKQogewot
ICAgIGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShyZWNvbXBpbGVNb2RlKSkKLSAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAgVHJhY2VT
Y29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJseUNvbXBp
bGVFbmQpOwogCi0gICAgaWYgKHJlY29tcGlsZU1vZGUpCi0gICAgICAgIEFTU0VSVChtX21vZHVs
ZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpID09IHJlY29tcGlsZU1vZGUpOwotCiAgICAgYXV0
byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUs
IGNvbnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBl
bm91Z2ggc3BhY2UgZm9yICIpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6
ZSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgZmFpbChob2xkTG9j
ayhtX2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDEzMSArMTc4LDE1MyBA
QCB2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUp
CiAgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4
ID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBv
cnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0LT5maWVs
ZCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBmdW5j
dGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgaW1wb3J0LT5tb2R1bGUs
ICI6ICIsIGltcG9ydC0+ZmllbGQpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
cy5hdChpbXBvcnQtPmtpbmRJbmRleCk7Ci0gICAgICAgIG1fd2FzbUV4aXRTdHVicy51bmNoZWNr
ZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IobV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1
cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBtX3dhc21FeGl0U3R1YnMu
dW5jaGVja2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKCZtX3ZtLCBtX2NhbGxMaW5rSW5mb3Ms
IHNpZ25hdHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CiAgICAgfQogCi0gICAgbV9j
dXJyZW50SW5kZXggPSAwOworICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7Cit9CiAK
LSAgICBhdXRvIGRvV29yayA9IFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBp
ZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb25JbmRl
eCA9IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7Ci0g
ICAgICAgICAgICB9CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBob3JlIGNsYXNzLi4uIGFuZCB0
aGlzIGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xhc3MgUGxhbjo6VGhyZWFkQ291
bnRIb2xkZXIgeworcHVibGljOgorICAgIFRocmVhZENvdW50SG9sZGVyKFBsYW4mIHBsYW4pCisg
ICAgICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7
CisgICAgfQogCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9z
b3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1
bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9
IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOwotICAg
ICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNp
emUoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9u
SW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAg
ICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2ln
bmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKLQotICAgICAgICAgICAg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlv
bkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3JtYXRpb24s
IG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwotCi0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aXBs
ZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9v
c2UgdGhlIGZpcnN0LgotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VT
dHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGlu
ZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklYTUUgbWFrZSB0aGlz
IGFuIEV4cGVjdGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2N1cnJl
bnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICB+VGhyZWFk
Q291bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1f
bG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwogCi0gICAg
ICAgICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJtaW5hdGUgb24gdGhlIG5leHQgZXhlY3V0aW9uLgot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFt
X3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICBtX3BsYW4uY29tcGxl
dGUobG9ja2VyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25z
W2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKLSAgICAg
ICAgfQotICAgIH07CisgICAgUGxhbiYgbV9wbGFuOworfTsKIAotICAgIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1l
cygpKQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK3ZvaWQgUGxh
bjo6Y29tcGlsZUZ1bmN0aW9ucygpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlBy
ZXBhcmVkKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24i
KTsKIAotICAgIHVpbnQzMl90IHRocmVhZENvdW50ID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJ
VCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgOiAxOwotICAgIHVpbnQzMl90IG51
bVdvcmtlclRocmVhZHMgPSB0aHJlYWRDb3VudCAtIDE7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50
aWZpZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtV29ya2VyVGhy
ZWFkcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkr
KykKLSAgICAgICAgdGhyZWFkcy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlVGhyZWFkKCJqc2Mud2Fz
bS1iMy1jb21waWxhdGlvbi50aHJlYWQiLCBkb1dvcmspKTsKKyAgICBpZiAobV9zdGF0ZSA+PSBT
dGF0ZTo6Q29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBUaHJlYWRDb3VudEhvbGRlciBo
b2xkZXIoKnRoaXMpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgKyttX2N1cnJl
bnRJbmRleDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6
OkNvbXBpbGVkKTsKKyAgICAgICAgfQogCi0gICAgZG9Xb3JrKCk7IC8vIExldCB0aGUgbWFpbiB0
aHJlYWQgZG8gc29tZSB3b3JrIHRvby4KKyAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25T
dGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRl
eF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGgg
PD0gbV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAg
dW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1
bmN0aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBt
X21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIEFTU0VSVCh2
YWxpZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9V
bmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOworCisgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsK
KyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV92
bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0
aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgbV9tb2RlKTsKKworICAgICAgICBpZiAoVU5MSUtF
TFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91
c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZh
aWwobG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAv
LyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24odGhyZWFkc1tpXSk7CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9u
SW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9CiAKLSAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAg
ewotICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlv
bkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVE
ZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5k
ZXgpLT50b1N0cmluZygpOwordm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tl
ciYpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVu
dEluZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgp
OyBmdW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyKTsKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAgIENvbXBp
bGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbklu
ZGV4XTsKKyAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgi
V2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVz
Y3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50
Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNv
bnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rp
b25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBv
aW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0s
ICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxs
LCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2Fz
bUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAK
LSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+
anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5j
b21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNv
bXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNz
ZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlw
dGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9k
dWN0cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KIAotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKSB7
Ci0gICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFy
dFRpbWUpLm1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxlIGFuZCBs
aW5rIHRoZSBtb2R1bGUiKTsKLSAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNoIHRoZSBj
YWxsIHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0byYg
dW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVz
czsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rp
b25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGlu
c3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBi
ZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3Mg
PSBjYWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMKKyAg
ICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAg
ICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxl
SW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2Fs
bC5mdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRz
IGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBh
dGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0Vf
QVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisg
ICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQgPT0gVW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAgICAgID8g
bV93YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkKICAgICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0U3R1YnMu
YXQoY2FsbC5mdW5jdGlvbkluZGV4KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50
YXJnZXQgIT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNh
bGwuZnVuY3Rpb25JbmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2lu
dC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5j
dGlvbkluZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBp
bGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgbV9mYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
Q29tcGxldGVkKSB7CisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAg
ICAgICBtX2NvbXBsZXRpb25UYXNrKCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQubm90aWZ5
QWxsKCk7CisgICAgfQogfQogCi12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJB
c3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2b2lkIFBs
YW46OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25J
bmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQotICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5
Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1Rv
V2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVl
KTsKLQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9
IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUo
ZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3Rh
dGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhh
dmUgYSB3YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2Nr
IHRvIGNvbXBsZXRlIC8gZmFpbC4KKyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xvY2spOwor
ICAgIH0KK30KIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50
cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpjYW5jZWwo
KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0g
U3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJh
bCgiV2ViQXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBt
ZXNzYWdlIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgfQog
fQogCisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5MDkzZWY2
YmE4MTg0ZTQ1YzRmZTAwNzY2MmY0Li45ZGIxNGVhNjk1OWE1NzYyYThjMzljODNmMjdkYmY4OTVj
MjM0YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEgKzQwLDk2
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNlRGVmZXJy
ZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQgZG9u
dEZpbmFsaXplKFBsYW4mKSB7IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChQbGFu
Jik+IENvbXBsZXRpb25UYXNrOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxD
b21waWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxk
IG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJl
IGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFzeW5jV29y
aywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZl
Y3Rvcjx1aW50OF90PiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAg
IGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0g
c3RkOjpudWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBz
dGQ6Om51bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAg
IHZvaWQgY29tcGlsZUZ1bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBp
bml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNp
Z25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwotCi0g
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWls
ZWQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVz
c2FnZTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGlu
aXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBvcnQ+JiBl
eHBvcnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAg
ICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAgICAgc2l6
ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnMuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmso
KSk7CisgICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAg
ICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1
bGVJbmZvcm1hdGlvbigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAogICAgIEJh
ZzxDYWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgp
ICYmICFoYXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3Mp
OwogICAgIH0KIAogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhpdFN0dWJz
KCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1vZGUoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAg
dm9pZCBzZXRNb2RlQW5kUHJvbWlzZShNZW1vcnlNb2RlIG1vZGUsIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlKQorICAgIHsKKyAgICAgICAgbV9tb2RlID0gbW9kZTsKKyAgICAgICAgbV9wZW5k
aW5nUHJvbWlzZSA9IHByb21pc2U7CisgICAgfQorICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpTUHJvbWlzZURlZmVycmVkKiBwZW5kaW5nUHJvbWlz
ZSgpIHsgcmV0dXJuIG1fcGVuZGluZ1Byb21pc2U7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJl
dHVybiBtX3ZtOyB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7CisgICAgICAg
IEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQsCisgICAgICAg
IENvbXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBD
b21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKworICAgIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0K
KworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFl
cnJvck1lc3NhZ2UoKS5pc051bGwoKTsgfQorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhhc0JlZW5QcmVwYXJl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9CisKKyAgICB2
b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToK
KyAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291
bnRIb2xkZXI7CisKKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CisK
KyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAgICB2b2lkIGZhaWwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworCisgICAgY29uc3QgY2hhciogc3Rh
dGVTdHJpbmcoU3RhdGUpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9u
PiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRl
eD4gbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKQEAg
LTEwMywxNiArMTM4LDI0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxX
YXNtSW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3Rv
cjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAgIFZNKiBt
X3ZtOworICAgIFZNJiBtX3ZtOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3BlbmRpbmdQcm9t
aXNlIHsgbnVsbHB0ciB9OworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRhc2s7CisK
ICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNp
emVfdCBtX3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0
cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKKyAgICBN
ZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9j
ayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1fc3RhdGUg
eyBTdGF0ZTo6SW5pdGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAg
ICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1f
Y3VycmVudEluZGV4IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFkYzYzMmVh
OTIzNTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2lu
Y2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAg
IGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlv
bkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rp
b25JbmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1i
bHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9p
bnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5q
c1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1i
bHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21D
YWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBjYWxs
YmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5
cG9pbnRDYWxsZWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IDc1ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMzNzRmY2Fl
NjU0NjEyMTQuLjkyMzg1OTRiYTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMjcxLDcgKzI3
MSw3IEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByCiAgICAgICAgIGlmICh0YXJnZXQuc2lnbmF0
dXJlKCkgPT0gVm9pZCkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiYnJhbmNoIHRvIGJs
b2NrIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCB0YXJnZXQudHlwZSgpID09IEJsb2Nr
VHlwZTo6VG9wTGV2ZWwgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJs
b2NrIiwgIiBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwgdGFyZ2V0
LnNpZ25hdHVyZSgpKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJnZXQuc2ln
bmF0dXJlKCkgIT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUg
ZG9lc24ndCBtYXRjaCBibG9jaydzIHR5cGUiKTsKIAogICAgICAgICByZXR1cm4geyB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDcw
N2JkMGJjYjMwMTJmNWIwM2FiZDlkMmJhZmViZjQ0ZTVjODNlMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAsMCArMSwy
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworI2luY2x1ZGUgPHd0Zi9OdW1i
ZXJPZkNvcmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgY2hhciogV29ya2xpc3Q6OnBy
aW9yaXR5U3RyaW5nKFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkp
IHsKKyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlvbjogcmV0dXJuICJQcmVwYXJhdGlvbiI7
CisgICAgY2FzZSBQcmlvcml0eTo6U2h1dGRvd246IHJldHVybiAiU2h1dGRvd24iOworICAgIGNh
c2UgUHJpb3JpdHk6OkNvbXBpbGF0aW9uOiByZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAgICBjYXNl
IFByaW9yaXR5OjpTeW5jaHJvbm91czogcmV0dXJuICJTeW5jaHJvbm91cyI7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0OjpUaHJl
YWQgZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlID0gQXV0b21hdGljVGhyZWFkOworICAgIFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYg
bG9ja2VyLCBXb3JrbGlzdCYgd29yaykKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgd29yay5tX2xv
Y2ssIHdvcmsubV9wbGFuRW5xdWV1ZWQpCisgICAgICAgICwgd29ya2xpc3Qod29yaykKKyAgICB7
CisKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0
aW9uUGxhbihjb25zdCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBhdXRvJiBxdWV1
ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVu
dC5wbGFuKQorICAgICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgUG9sbFJlc3Vs
dCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisgICAgICAgIHN5bmNocm9uaXpl
Lm5vdGlmeUFsbCgpOworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgeworCisgICAg
ICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAg
ICAgICAgaWYgKHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAgIGVsZW1l
bnQgPSBxdWV1ZS50b3AoKTsKKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQg
dmFsaWRhdGUvcHJlcGFyZS4KKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFz
QmVlblByZXBhcmVkKCkpCisgICAgICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50LnBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
UG9sbFJlc3VsdDo6V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3Ro
ZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRo
ZXJlIGFyZSBvdGhlciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0
aW9uUGxhbihsb2NrZXIpOworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0KKworICAg
IFdvcmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNvbXBsZXRl
ID0gWyZdICgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKworICAgICAg
ICBQbGFuKiBwbGFuID0gZWxlbWVudC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQocGxhbik7
CisgICAgICAgIGlmICghcGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAgICAgIHBs
YW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxhbi0+aGFz
V29yaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBwbGFuLT5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKCp3b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0UHJpb3Jp
dHkoKTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsKKyAgICAg
ICAgICAgIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBzb21lIG9j
Y2FzaW9uYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5IGUuZy4g
c3luY2hyb25vdXMsIHBsYW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBsYW4tPmNv
bXBpbGVGdW5jdGlvbnMoKTsKKyAgICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAg
ICAgICBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmtsaXN0Lm1f
bG9jaykpOworICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAg
ICBDb25kaXRpb24gc3luY2hyb25pemU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0OworICAgIC8v
IFdlIGNhbiBvbmx5IG1vZGlmeSBlbGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4gQSBzeW5j
aHJvbm91cyBjb21waWxlIG1pZ2h0IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBpbiBvcmRl
ciB0byBib29zdCB0aGUgcHJpb3JpdHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7Cit9Owor
Cit2b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7CisgICAgc3dp
dGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgorICAgICAg
ICBwcmlvcml0eSA9IFByaW9yaXR5OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK2VudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFrLCBEcm9w
QW5kQ29udGludWUsIENvbnRpbnVlIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2
b2lkIFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3Rv
ciYgZnVuYykKK3sKKyAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4g
aXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMg
ZnVuY3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBx
dWV1ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIG91ciBv
d24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1CisgICAgc3RkOjp2ZWN0b3I8UXVldWVF
bGVtZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgeworICAgICAg
ICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgIG1fcXVldWUu
cG9wKCk7CisgICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50KTsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykgeworICAg
ICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6OkNvbnRp
bnVlKQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICBj
b250aW51ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykK
KyAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworfQorCit2b2lkIFdvcmtsaXN0OjplbnF1
ZXVlKFJlZjxQbGFuPiBwbGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwor
CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsm
XSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5w
bGFuLmdldCgpICE9ICZwbGFuLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVz
dWx0OjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gSWYgd2UgZG9uJ3Qg
aGF2ZSBhIHByb21pc2UgaXQgbXVzdCBiZSBzeW5jaHJvbm91cyBzbyB3ZSBzaG91bGQgYm9vc3Qg
dGhlIHByaW9yaXR5LgorICAgIFByaW9yaXR5IHByaW9yaXR5ID0gcGxhbi0+cGVuZGluZ1Byb21p
c2UoKSA/IFByaW9yaXR5OjpQcmVwYXJhdGlvbiA6IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRW5xdWV1aW5nIHBsYW4gd2l0aCBwcmlvcml0eTogIiwg
cHJpb3JpdHlTdHJpbmcocHJpb3JpdHkpKTsKKyAgICBtX3F1ZXVlLnB1c2goeyBwcmlvcml0eSwg
bmV4dFRpY2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKKyAgICBtX3BsYW5FbnF1ZXVlZC0+bm90
aWZ5T25lKGxvY2tlcik7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9u
b3VzbHkoUGxhbiYgcGxhbikKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOworICAgICAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4g
aXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMg
ZnVuY3Rpb24KKyAgICAgICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVuIGFuZCB0
aGUgcXVldWUgc2hvdWxkIGJlIHNtYWxsLgorICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhh
dmUgb3VyIG93biBQcmlvcml0eVF1ZXVlIHRoYXQgZG9lc24ndCBzdWNrLgorICAgICAgICBzdGQ6
OnZlY3Rvcjxjb25zdCBRdWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOworICAgICAgICBpdGVyYXRlKGxv
Y2tlciwgWyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50LnBsYW4gPT0gJnBsYW4pIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnByaW9yaXR5ID0g
UHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVz
dWx0OjpVcGRhdGVBbmRCcmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRlUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yIChhdXRv
IGVsZW1lbnQgOiBlbGVtZW50cykKKyAgICAgICAgICAgIG1fcXVldWUucHVzaChlbGVtZW50KTsK
KworICAgICAgICBmb3IgKGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgeworICAgICAgICAgICAg
aWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuID09ICZwbGFuKQorICAgICAgICAgICAgICAgIHRocmVh
ZC0+ZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHBsYW4ud2FpdEZvckNvbXBsZXRpb24oKTsKK30KKwordm9pZCBXb3JrbGlz
dDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOworICAgIC8vIHN0ZDo6cHJpb3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBhbiBpdGVy
YXRvci4uLiA6KCBXaGlsZSB0aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0aW9uCisgICAgLy8gc2hv
dWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUgc2hvdWxkIGJlIHNtYWxs
LgorICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9yaXR5UXVldWUgdGhh
dCBkb2Vzbid0IHN1Y2suCisgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVtZW50JiBl
bGVtZW50KSB7CisgICAgICAgIGlmICgmZWxlbWVudC5wbGFuLT52bSgpID09ICZ2bSkgeworICAg
ICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVy
YXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0
ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgZm9yIChhdXRvJiB0aHJlYWQg
OiBtX3RocmVhZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuICYmICZ0aHJl
YWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0aHJlYWQgY2Fu
J3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2Nr
IHRvIGRvIHNvLgorICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnBsYW4tPmNhbmNlbCgpOwor
ICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KCptX2xvY2spOworICAgICAgICB9
CisgICAgfQorfQorCitXb3JrbGlzdDo6V29ya2xpc3QoKQorICAgIDogbV9sb2NrKEJveDxMb2Nr
Pjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OmNyZWF0ZSgpKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRz
ID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNv
cmVzKCkgOiAxOworICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDb21waWxh
dGlvblRocmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkczsgaSsrKQorICAg
ICAgICBtX3RocmVhZHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8V29ya2xpc3Q6
OlRocmVhZD4obG9ja2VyLCAqdGhpcykpOworfQorCitXb3JrbGlzdDo6fldvcmtsaXN0KCkKK3sK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAgICBtX3F1
ZXVlLnB1c2goeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsK
KyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIH0KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3RocmVhZHNbaV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlz
dDsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKSB7IHJldHVybiBnbG9iYWxX
b3JrbGlzdDsgfQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVXb3JrbGlzdCwgW10geworICAgICAgICBnbG9iYWxXb3JrbGlzdCA9IG5ldyBXb3JrbGlz
dCgpOworICAgIH0pOworICAgIHJldHVybiAqZ2xvYmFsV29ya2xpc3Q7Cit9CisKKworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWMw
NzM1YmMyYTE2ZmMyMzZmODE1NzBmMjhlODU5YTVjY2NlNDUwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTAsMCArMSwxMTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIlZNLmgiCisKKyNp
bmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1Byb21pc2VE
ZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOworCitjbGFzcyBXb3Jr
bGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV29ya2xp
c3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5x
dWV1ZShSZWY8UGxhbj4pOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yVk0oVk0mKTsKKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25vdXNseShQbGFuJik7
CisKKyAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qKTsKKyAg
ICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qKTsKKworcHJpdmF0
ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKKworICAgIHR5
cGVkZWYgdWludDY0X3QgVGlja2V0OworICAgIFRpY2tldCBuZXh0VGlja2V0KCkgeyByZXR1cm4g
bV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBlbnVtIGNsYXNzIFByaW9yaXR5IHsKKyAg
ICAgICAgU2h1dGRvd24sCisgICAgICAgIFN5bmNocm9ub3VzLAorICAgICAgICBDb21waWxhdGlv
biwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworICAgIGNvbnN0IGNoYXIqIHByaW9yaXR5
U3RyaW5nKFByaW9yaXR5KTsKKworICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQgeworICAgICAgICBQ
cmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRpY2tldDsKKyAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW47CisKKyAgICAgICAgdm9pZCBuZXh0UHJpb3JpdHkoKTsKKyAgICB9OworCisg
ICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgUXVl
dWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbGVmdC50aWNrZXQgPiByaWdodC50aWNrZXQ7CisgICAgICAg
ICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5OworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpdGVyYXRl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOworCisgICAgQm94PExvY2s+
IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1
ZXVlZDsKKyAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxvdyBidXQgdGhhdCdz
IHVubGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBpbGUgdGhpbmdzIG9m
IHRoZSBzYW1lCisgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVyLCB3aGljaCBpc24n
dCB3cm9uZywganVzdCBzdWJvcHRpbWFsLgorICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0
IHsgMCB9OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpWZWN0b3IgYnV0IFdU
Rjo6VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVyYXRvci4KKyAgICBz
dGQ6OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8UXVldWVFbGVtZW50
PiwgQ29tcGFyYXRvcj4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwg
UGxhbio+IG1fYWN0aXZlUGxhbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+
PiBtX3RocmVhZHM7Cit9OworCitXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpOwor
SlNfRVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCk7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgK
aW5kZXggYjg3NzdkYTBkNGQ3YTEzMGY0MjI0ZWQ0NWZjY2MyZDE5YzFmMjdjNi4uYThhM2RjYTNk
MDlmNWRkMzlkYTZiOWE4Zjk5NWRjODUwODk4N2FjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaApAQCAtNjAsOCArNjAsOCBA
QCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMo
KSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIAogcHJpdmF0
ZToKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlwb2ludCYmKTsKLSAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwogCiAgICAgV2FzbTo6RW50cnlwb2ludCBt
X2VudHJ5cG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmZjg3MTE2ODE5YTMyMjQzOWU4
MWNiZDA0NjQ3MmEyNmYyMTgzZDhiLi5lYjk2MDczYjY5OThiMDJhMjA3NGFiMTVkZjc3NDY3NjJk
NmZiNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMjksMzEgKzI5LDY3IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5l
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0ciwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9OwogCi1KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3Nl
bWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2FzbTo6TWVtb3J5TW9k
ZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwg
IFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxhbiwgdW5zaWduZWQg
Y2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3Mp
KQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisgICAgLCBt
X3BsYW4oV1RGTW92ZShwbGFuKSkKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9jYWxsZWVD
b3VudChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG93bmVyKTsK
KyAgICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxvY2sobW9kZSkpOworICAgIG1vZHVsZSgpLT5t
X2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCB0aGlz
KTsKKwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCit2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpbml0aWFsaXplZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBwbGFuKCkudm0oKTsKKyAgICBBU1NFUlQo
dm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IXBsYW4oKS5oYXNXb3JrKCkpOworCisgICAgaWYgKHBsYW4oKS5mYWlsZWQoKSkgeworICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9IHBsYW4oKS5lcnJvck1lc3NhZ2UoKTsKKyAgICAgICAgbV9wbGFu
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
KHBsYW4oKS5tb2RlKCkgPT0gbW9kZSgpKTsKKyAgICBBU1NFUlQocGxhbigpLmludGVybmFsRnVu
Y3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworCisgICAgbV9jYWxsTGlua0luZm9zID0g
cGxhbigpLnRha2VDYWxsTGlua0luZm9zKCk7CisgICAgbV93YXNtRXhpdFN0dWJzID0gcGxhbigp
LnRha2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuKCkuaW5pdGlhbGl6ZUNhbGxlZXMoWyZd
ICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAg
ICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRD
YWxsZWUpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgs
IHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9KTsKKworICAgIG1fcGxhbiA9IG51bGxwdHI7
Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwogfQogCi1ib29s
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4oSlNXZWJB
c3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAgIGlmICghcnVubmFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2FzbTo6TWVtb3J5TW9kZSBjb2RlTW9kZSA9IG1v
ZGUoKTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUgPSBtZW1vcnktPm1lbW9yeSgp
Lm1vZGUoKTsKICAgICBzd2l0Y2ggKGNvZGVNb2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAppbmRleCBmMDMzMTBlYTVl
MjA2MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li41NzhhNjlmNDk4MTVhODI1MjNjMTEyOTQ4
ZmJkOGVhMDkwMzVmMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTczLDYgKzczLDIyIEBAIEFMV0FZU19JTkxJ
TkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVmZmVyVmlldyA/IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQogCitBTFdBWVNfSU5MSU5FIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBieXRlT2Zmc2V0OworICAgIHNpemVfdCBi
eXRlU2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVj
LCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0
cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBpZiAoYnVmZmVyKQor
ICAgICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKFZNJiB2
bSwgSlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiomIHdhc21GdW5jdGlvbiwg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNtV3JhcHBlckZ1bmN0aW9uKQogewogICAg
IGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjppbmZvKCkpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcAppbmRleCAxYzExYjBjYTY1YzkxNzQyZjhlNDgxM2MyNGQ5NzVmNjVlZWJh
YTE4Li45MWRhMzllMjU3ZTE0MzEzYjM1MzRmNjNlZmRhNTY1MjI5ODA0NThmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAKQEAgLTMyLDMxICszMiwxNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5Lmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQotewotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBXZSBjcmVhdGUgc3R1
YiBtZW1vcmllcyBldmVuIGZvciBtb2R1bGVzIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ2V0IGEg
bWVtb3J5IHNvIHdlIHdhbnQgdG8gYXZvaWQgcmVjb21wbGluZyB0aGVyZS4KLSAgICBpZiAobWVt
b3J5LT5tZW1vcnkoKSkgewotICAgICAgICBhdXRvIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5t
b2R1bGUoKS0+Y29kZUJsb2NrKHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCk7Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29k
ZUJsb2NrKTsKLSAgICB9Ci0gICAgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOwotfQot
Ci1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKLXsKLSAgICAv
LyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNob3VsZCB0cnkg
dG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXpl
KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgc3RydWN0dXJlLCBtb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBtb2R1bGUsIG1vZHVsZU5hbWVz
cGFjZU9iamVjdCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQorY29uc3QgQ2xhc3NJbmZvIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSkgfTsKIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogewpAQCAtNzUsMTEgKzYwLDExIEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsK
IAorICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKICAgICBjb25zdCBzaXplX3Qg
ZXh0cmFNZW1vcnlTaXplID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6
ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWludDY0
X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKLSAgICBtX2NvZGVCbG9jay5zZXQodm0s
IHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0
LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1lc3BhY2VP
YmplY3QsIE5vbmUpOwogfQpAQCAtOTUsMTYgKzgwLDI3NyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21v
ZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9t
ZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1vZHVsZSgpLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoKnRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworfQorCit2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2soVk0mIHZtLCBS
ZWY8V2FzbTo6UGxhbj4gcGxhbikKK3sKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIG1vZHVsZSgpLCBtZW1vcnlNb2RlKCksIFdURk1vdmUo
cGxhbiksIG1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmludGVybmFsRnVuY3Rpb25Db3Vu
dCgpKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgQVNT
RVJUKCFjb2RlQmxvY2stPmluaXRpYWxpemVkKCkpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgY29kZUJsb2NrKCkt
PmluaXRpYWxpemUoKTsKKworICAgIGlmICghY29kZUJsb2NrKCktPnJ1bm5hYmxlKCkpIHsKKyAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6
OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3Ry
dWN0dXJlKCksIGNvZGVCbG9jaygpLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bihtZW1v
cnkoKSkpOworCisgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29yZCgpKTsKKyAg
ICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsICk7CisKKyAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxl
UmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7Cit9CisKK0pTV2ViQXNzZW1ibHlJbnN0
YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0
LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKworICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwor
CisgICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgeworICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH07CisKKyAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBp
cyBub3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVF
cnJvciBpcyB0aHJvd24uCisgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgp
ICYmICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBi
ZWNhdXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0aGUgV2ViQXNzZW1ibHkuTW9k
dWxlIHJlcXVpcmVzIGltcG9ydHMiKSkpOworCisgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwg
IldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CisgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1v
ZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5
LCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBudWxscHRyKTsKKworICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3Bh
Y2UgPSBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKKyAgICAvLyBGSVhN
RTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhy
b3cgT09NIGhlcmUuCisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVs
ZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlv
bkNvdW50KCkpOworICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1v
ZHVsZU5hbWVzcGFjZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKKworICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFs
bHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJs
eS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2
ZWx5LgorICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4
dGVybmFsIHZhbHVlcy4KKyAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOworICAg
IHVuc2lnbmVkIG51bUltcG9ydEdsb2JhbHMgPSAwOworCisgICAgYm9vbCBoYXNNZW1vcnlJbXBv
cnQgPSBmYWxzZTsKKyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0gZmFsc2U7CisgICAgLy8gRm9y
IGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CisgICAgZm9yIChhdXRvJiBpbXBvcnQg
OiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CisgICAgICAgIC8vIDEuIExldCBvIGJlIHRo
ZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVs
ZV9uYW1lKS4KKyAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBpbXBvcnQubW9kdWxlKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAg
ICAgIC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisg
ICAgICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0
IG11c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVG
b3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKKworICAgICAgICAvLyAzLiBMZXQgdiBiZSB0
aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCisgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgaW1wb3J0LmZpZWxkKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgeworICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIC8v
IDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBJc0Nh
bGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7CisKKyAgICAgICAgICAg
IEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKKyAgICAgICAg
ICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6Cisg
ICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CisgICAgICAgICAg
ICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKKyAgICAg
ICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1
bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAgICAgICAgICAgIC8vIGEuIElm
IHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRo
cm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKHdh
c21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9
IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVy
RnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGIuIExl
dCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRl
eCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBv
cnQua2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRl
eCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJv
dmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6CisgICAgICAgICAgICAvLyBhLiBMZXQg
Y2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hp
Y2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlw
dCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnks
IGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCisgICAgICAgICAgICAvLyBOb3Rl
OiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KKyAgICAgICAgICAgIC8vIGl2LiBB
cHBlbmQgdiB0byBmdW5jcy4KKyAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxs
IHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFi
b3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBi
ZWxvdyAodGhlIEpTRnVuY3Rpb24pLgorCisgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVu
Y3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAgICAgaW5zdGFuY2UtPmltcG9y
dEZ1bmN0aW9ucygpW251bUltcG9ydEZ1bmN0aW9ucysrXS5zZXQodm0sIGluc3RhbmNlLCBmdW5j
dGlvbik7CisgICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQp
OyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgor
ICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKKyAgICAg
ICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1
ZSk7CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9i
amVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIXRh
YmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgaXMgbm90IGFu
IGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKKworICAgICAgICAgICAgdWludDMy
X3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5p
bml0aWFsKCk7CisgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNp
emUoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQor
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2lu
aXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFhY3R1YWxNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
VGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVx
dWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGlt
dW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
SW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4
cGVjdGVkICdtYXhpbXVtJyIpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlp
LiBBcHBlbmQgdiB0byB0YWJsZXMuCisgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbVGFi
bGVdXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBp
bnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogeworICAgICAgICAgICAgLy8gNi4gSWYg
aSBpcyBhIG1lbW9yeSBpbXBvcnQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVt
b3J5SW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24g
ZmFpbHVyZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeSk7CisgICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5
TWVtb3J5Kj4odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2Vi
QXNzZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisg
ICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVt
b3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsK
KworICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7CisgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQg
YWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOworICAgICAgICAgICAg
aWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9v
IHNtYWxsIikpKTsKKworICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1h
eGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7CisgICAgICAgICAg
ICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1h
eGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhp
bXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworCisgICAgICAg
ICAgICAgICAgaWYgKGFjdHVhbE1heGltdW0gPiBleHBlY3RlZE1heGltdW0pCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2Vy
IHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KKyAgICAgICAgICAg
IC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNT
RVJUKCFpbnN0YW5jZS0+bV9tZW1vcnkpOworICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5
LnNldCh2bSwgaW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAg
Ly8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBpIGlz
IG5vdCBhbiBpbW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAg
IEFTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFi
aWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOworICAgICAgICAgICAgLy8gaWkuIElm
IHRoZSBnbG9iYWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRo
cm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9y
bWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0
IikpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOworICAg
ICAgICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMu
CisgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4
KTsKKyAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQu
a2luZEluZGV4XS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAg
ICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9J
bnQzMihleGVjKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdh
c206OkYzMjoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEds
b2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAg
ICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIXRocm93
U2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNN
ZW1vcnlJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8g
V2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAg
ICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUo
dm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKwor
ICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCisgICAgICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNl
Tm9uTnVsbCgpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IG51bGxwdHIpOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpZiAoISFtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhl
ciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRp
b24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYm
ICFoYXNUYWJsZUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBX
ZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRl
KGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVT
dHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhp
bXVtKCkpOworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9j
YXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCisgICAgICAgICAgICAvLyBJ
ZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2
YWxpZGF0aW9uIGVycm9yLgorICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+
bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdl
IGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBj
aGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJl
Z2lzdGVycy4KKyAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1v
cnkoKSkpKSk7CisgICAgfQorICAgIAorICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFT
U0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxH
bG9iYWwpOworICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2Jh
bHM7IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xv
YmFsSW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9y
bWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5p
bml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAg
ICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9i
YWxJbXBvcnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJ
bXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwu
aW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxC
aXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKCFpbnN0
YW5jZS0+Y29kZUJsb2NrKCkpOworICAgIGluc3RhbmNlLT5tX2NvZGVCbG9jay5zZXRNYXlCZU51
bGwodm0sIGluc3RhbmNlLCBqc01vZHVsZS0+Y29kZUJsb2NrKGluc3RhbmNlLT5tZW1vcnlNb2Rl
KCkpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkg
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggZTIyODQ5Njk2NzIwNWEz
MTM2Yzg4M2JiZGUzMjZhZGJjNzExMTMwZC4uZWM5YmM4ZTgxNDA3MmI3ZWUyNWU5MmI5YjQ5ZTEw
ODQ2YWJmZDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTM4LDUxICszOCwzNCBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1v
ZHVsZTsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGlj
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3Nl
bWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1v
ZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7
CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5tb2R1bGUoKTsKLSAgICB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KKyAg
ICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gY29kZUJsb2NrKCkgJiYgY29kZUJs
b2NrKCktPmluaXRpYWxpemVkKCk7IH0KKyAgICB2b2lkIGFkZFVuaXRpYWxpemVkQ29kZUJsb2Nr
KFZNJiwgUmVmPFdhc206OlBsYW4+KTsKKyAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBF
eGVjU3RhdGUqKTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7Ci0gICAgICAgIHJldHVy
biAmaW1wb3J0RnVuY3Rpb25zKClbaWR4XTsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SW1wb3J0
RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0g
ICAgICAgIGltcG9ydEZ1bmN0aW9uKGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwotICAgIH0K
KyAgICBKU09iamVjdCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNT
RVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygp
W2lkeF0uZ2V0KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0
dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIg
YSByZWNvbXBpbGUuCi0gICAgdm9pZCBzZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFz
c2VtYmx5TWVtb3J5Kik7CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5
TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlz
LCB2YWx1ZSk7IH0KICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBt
ZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFibGUoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJs
ZSk7IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KICAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC05MCwxMSAr
NzMsNiBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KICAg
ICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdl
dCgpW2ldID0gYml0czsgfQogCi0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0
aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1
bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIGlkeDsKLSAgICB9Ci0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
R2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fZ2xvYmFscyk7IH0KQEAgLTExMyw2ICs5MSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHBy
aXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKworICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGY0
MTQ2N2Y0ZmFhZTlkYWEwODE2NzRlN2YyMDU3OGQ0YzVlYjZmM2MuLmEyY2QzNDYxMmE2YjllNGIy
YzlkMjExZWZkODQwOWEwNDY4MDVkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC00MiwzNSArNDIsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1l
bW9yeU1vZGU+IG1vZGUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpjcmVhdGVTdHViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxh
bikKIHsKKyAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciBpcyB0aHJvd24uCi0gICAgcGxhbi5ydW4obW9kZSk7Ci0gICAgaWYg
KHBsYW4uZmFpbGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0sIHBsYW4uZXJyb3JNZXNzYWdl
KCkpKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwg
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1
cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQotICAgIGlmIChtb2RlKQotICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkp
OwotCi0gICAgdW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3Vu
dCgpOwotICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0
ZSh2bSwgdGhpcywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0
dWJzKCksIHBsYW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7Ci0KLSAgICBwbGFuLmluaXRpYWxpemVD
YWxsZWVzKGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpz
RW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBv
aW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAg
ICB9KTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKLXsKLSAg
ICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwog
Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXpl
KTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1i
bHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUtPmZp
bmlzaENyZWF0aW9uKHZtLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwogfQog
CiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzgs
NjEgKzYxLDQwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpK
U1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFz
c2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCisgICAgLCBtX3NvdXJjZUJ1ZmZlcihzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkKIHsK
IH0KIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJs
b2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkp
Ci17Ci0gICAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rl
czsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja3NbaV0gJiYgbV9jb2RlQmxvY2tzW2ld
LT5pc1NhZmVUb1J1bihtZW1vcnkpKQotICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tp
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGRvbid0IGhh
dmUgYSBjb2RlIGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCi0g
ICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVm
ZmVyLT5kYXRhKCkpLCBtX3NvdXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLQotICAgIGF1dG8q
IGNvZGVCbG9jayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIEFTU0VSVChwbGFuLmV4
cG9ydHMoKS5zaXplKCkgPT0gbV9leHBvcnRTeW1ib2xUYWJsZS0+c2l6ZSgpKTsKLSAgICBpZiAo
IUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0
cygpKQotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChleHAsIG1fZXhwb3J0U3ltYm9sVGFibGUt
PmNvbnRhaW5zKGV4cC5maWVsZC5pbXBsKCkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobW9kZSA9
PSBjb2RlQmxvY2stPm1vZGUoKSk7Ci0gICAgY29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhp
cywgY29kZUJsb2NrKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi12b2lkIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50
OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwogCi0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLT50YWtl
TW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0
aW9uLT5leHBvcnRzKSB7CisgICAgICAgIEFTU0VSVChleHAuZmllbGQuaXNTYWZlVG9TZW5kVG9B
bm90aGVyVGhyZWFkKCkpOworICAgICAgICBleHAuZmllbGQgPSBBdG9taWNTdHJpbmcoZXhwLmZp
ZWxkKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBpbXAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+aW1w
b3J0cykgeworICAgICAgICBBU1NFUlQoaW1wLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRo
cmVhZCgpKTsKKyAgICAgICAgaW1wLmZpZWxkID0gQXRvbWljU3RyaW5nKGltcC5maWVsZCk7Cisg
ICAgICAgIEFTU0VSVChpbXAubW9kdWxlLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsK
KyAgICAgICAgaW1wLm1vZHVsZSA9IEF0b21pY1N0cmluZyhpbXAubW9kdWxlKTsKKyAgICB9CiAK
LSAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24g
PSBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNl
dCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5
bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAg
OiBwbGFuLmV4cG9ydHMoKSkgeworICAgIGZvciAoYXV0byYgZXhwIDogbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZXhwb3J0cykgewogICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxl
LT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9y
dFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBT
eW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CisgICAgICAgIEFTU0VSVChleHAu
ZmllbGQuaW1wbCgpLT5pc0F0b21pYygpKTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNl
dChOb0xvY2tpbmdOZWNlc3NhcnksIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihleHAu
ZmllbGQuaW1wbCgpKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAg
IH0KIAotICAgIG1fc291cmNlQnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5
dGVTaXplKTsKLSAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3Jt
YXRpb24oKTsKICAgICBtX2V4cG9ydFN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3lt
Ym9sVGFibGUpOwotICAgIGNvZGVCbG9ja0Zvcihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0
aGlzLCBjb2RlQmxvY2spOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDM4OWU2M2EzMzVjMWMxMTdiNjk3Njk3MTBjNjNiZDdm
ODM0ZTg2ZTQuLmE0MTc4ODRkZDUxMTkzY2JkMGE2YzYyY2Q2NjkxZDMxOGY0YWUwZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgKQEAgLTQ4LDM1ICs0OCwzMiBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGlj
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRl
KFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0
ZVNpemUpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVm
UHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAK
ICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBj
b25zdCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIFJlZlB0cjxX
YXNtOjpNZW1vcnk+IHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgcmV0dXJuIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPm1lbW9yeS50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsgfQogICAgIFN5bWJvbFRhYmxlKiBl
eHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0
KCk7IH0KICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KIAotICAgIC8vIFJldHVy
bnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxl
ZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0Zvciht
X21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpKS5nZXQoKTsgfQotICAgIC8vIFJldHVy
bnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3Np
Ymx5IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsg
cmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQor
CisgICAgQXJyYXlCdWZmZXImIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQnVmZmVy
LmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+JiBjb2RlQmxvY2tGb3IoV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2Nv
ZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV07IH0KLSAgICBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBz
dGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAg
IGZyaWVuZCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOwogCi0gICAgSlNXZWJBc3NlbWJs
eU1vZHVsZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBF
eGVjU3RhdGUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgSlNXZWJB
c3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9z
b3VyY2VCdWZmZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
PiBtX21vZHVsZUluZm9ybWF0aW9uOworICAgIFJlZjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZm
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBv
cnRTeW1ib2xUYWJsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4g
bV9jb2RlQmxvY2tzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGFjMzE4MWIzZjlkY2VlNGUxMzNiMDg3ZmY3MWY0OTAx
NWU0ODhkMmQuLjA0MWRkMzU4NDg0NzRhNWU4Zjg5N2RlNzdjYjRiZDc1MmM5ZmIyOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFu
LmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgpAQCAtNDUsOCArNDcsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCiBjb25z
dCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJG
dW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlJbnN0
YW5jZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Ip
IH07CiAKIC8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5o
CkBAIC01NCwyNjkgKzU0LDUyIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfCiAgQGVuZAogICov
CiAKK3VzaW5nIFdhc206OlBsYW47CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgYXV0byYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1bGUg
aW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBleGVj
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFqc01vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0
YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRl
ciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CisgICAgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxl
Kj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHku
SW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogCiAgICAg
Ly8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlw
ZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAg
ICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmpl
Y3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICgh
aW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJB
c3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRv
IFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBk
ZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQp
KSkpOwogICAgIAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJl
KCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLQotICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwgaW1w
b3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0
YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKLXsKLSAgICBhdXRvJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwotCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
ID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0KLSAgICBhdXRvIGV4Y2VwdGlvbiA9
IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAg
IC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShp
bXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBp
ZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1w
b3J0cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIp
KSk7Ci0KLSAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJp
dmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIp
KTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0KLSAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpj
cmVhdGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRN
b2R1bGVOYW1lc3BhY2UoZXhlYykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7Ci0KLSAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUg
aW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2Vi
QXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJl
c3BlY3RpdmVseS4KLSAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlz
dCBvZiBleHRlcm5hbCB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0g
MDsKLSAgICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsKLQotICAgIGJvb2wgaGFzTWVt
b3J5SW1wb3J0ID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOwotICAg
IC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgotICAgIGZvciAoYXV0byYg
aW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewotICAgICAgICAvLyAxLiBMZXQg
byBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwg
aS5tb2R1bGVfbmFtZSkuCi0gICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBv
cnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBp
cyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBvcnRNb2R1
bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwg
ZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZh
bHVlKSkpOwotCi0gICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5n
IEdldChvLCBpLml0ZW1fbmFtZSkKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkg
ewotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAg
ICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJ
ZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4K
LSAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7Ci0KLSAgICAg
ICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKLSAg
ICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmpl
Y3Q6Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0gICAg
ICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsK
LSAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwg
d2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIC8v
IGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9m
IGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAg
aWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21X
cmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCi0gICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1
cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1
cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0
aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAgICAvLyBh
LiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1
cmUgd2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2
YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBp
ZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCi0gICAgICAgICAgICAv
LyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KLSAgICAgICAgICAgIC8v
IGl2LiBBcHBlbmQgdiB0byBmdW5jcy4KLSAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUg
SlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRz
IGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFu
ZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgotCi0gICAgICAgICAgICBBU1NFUlQobnVtSW1w
b3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldEltcG9ydEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKyspOwot
ICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJs
ZTogewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhp
cyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAg
ICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICBo
YXNUYWJsZUltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwotICAg
ICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRo
cm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5j
ZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IGV4cGVj
dGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgp
OwotICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7Ci0g
ICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0
aGF0IGlzIHRvbyBzbWFsbCIpKSk7Ci0KLSAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLm1heGltdW0oKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICgh
YWN0dWFsTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGlt
cG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRo
YXQgaXQgZG9lcyIpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4
cGVjdGVkTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVk
IFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAn
bWF4aW11bSciKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpaS4gQXBwZW5k
IHYgdG8gdGFibGVzLgotICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8g
aW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhpcyBz
aG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSk7Ci0gICAgICAgICAgICBo
YXNNZW1vcnlJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSog
bWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsK
LSAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVj
dCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1lbW9y
eSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4g
aW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKLQotICAgICAgICAgICAgV2FzbTo6
UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0
aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9y
eS0+bWVtb3J5KCkuaW5pdGlhbCgpOwotICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBl
eHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBv
cnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAgICAg
ICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50
IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWFjdHVhbE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSBy
ZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFjdHVhbE1h
eGltdW0gPiBleHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4
cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlp
LiBBcHBlbmQgdiB0byBtZW1vcmllcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tN
ZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwg
ZXhlYywgbWVtb3J5KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICAvLyA1LiBJZiBpIGlz
IGEgZ2xvYmFsIGltcG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0
YWJsZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICAgICAgQVNTRVJUKG1vZHVs
ZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNt
OjpHbG9iYWw6OkltbXV0YWJsZSk7Ci0gICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90
eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFs
c1tpbXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOwotICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSk7Ci0gICAgICAgICAgICAvLyBp
aWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAgICAg
IEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAg
ICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAg
ICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFu
IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFo
YXNNZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBt
ZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8
V2FzbTo6TWVtb3J5PiBtZW1vcnk7Ci0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5ID0ganNN
b2R1bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkp
OwotICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywKLSAgICAgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25O
dWxsKCkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVs
bHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgLy8gVGhlcmUgYXJlIHRo
cmVlIHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBh
biBpbml0aWFsaXplZCBDb2RlQmxvY2sgKHJ1bm5hYmxlKSwgc28gd2UganVzdCBuZWVkIHRvIGZp
bmFsaXplQ3JlYXRpb24uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ss
IHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAg
IC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9j
aywgc28gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgorCisg
ICAgaWYgKCFpbnN0YW5jZS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpZiAoaW5zdGFuY2Ut
PmNvZGVCbG9jaygpKQorICAgICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cGxhbigpKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgUGxhbih2bSwgbW9kdWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFBsYW46OmRv
bnRGaW5hbGl6ZSkpOworICAgICAgICAgICAgcGxhbi0+c2V0TW9kZUFuZFByb21pc2UoaW5zdGFu
Y2UtPm1lbW9yeU1vZGUoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBpbnN0YW5jZS0+YWRkVW5p
dGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsKKworICAgICAgICAgICAgYXV0
byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOworICAgICAgICAgICAgd29ya2xp
c3QuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5jb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4uZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
ewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNU
YWJsZUltcG9ydCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQo
KSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFs
d2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmlu
ZWQuCi0gICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBz
aG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJU
KCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAot
ICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1
cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2
b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5u
ZWQgcmVnaXN0ZXJzLgotICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5
KCkpKSkpOwotICAgIH0KLQotICAgIC8vIEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChu
dW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwp
OwotICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGds
b2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5k
ZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9u
Lmdsb2JhbHNbZ2xvYmFsSW5kZXhdOwotICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFs
aXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAo
Z2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBv
cnQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnRO
dW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0
R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlh
bEJpdHNPckltcG9ydE51bWJlcikpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJ
bXBvcnROdW1iZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5r
KGV4ZWMsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwotCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgp
OwotICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMp
OwotICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBpbnN0
YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0K
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4
IDU5NzA5ZjUxNzU2ZGM1NWVhMmJkMjc4NjYzNTA1ZTllMzkzN2YwMTMuLjM1OTk2MjJmMmNhMjQ5
YjFlMWQ4MTIwY2EzNjNhZDYxNGU1YTZlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
CkBAIC03NSwxMyArNzUsMTMgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
OjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmYKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIHNpemVfdCBieXRlT2Zmc2V0OwotICAgIHNpemVfdCBieXRlU2l6ZTsKLSAgICB1aW50
OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBidWZmZXIsIGJ5dGVPZmZz
ZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNv
dXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIGV4ZWMsIHN0cnVjdHVyZSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQdHI8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0
UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCAqc291cmNlLCBXYXNtOjpQbGFuOjpWYWxpZGF0aW9uLCBX
YXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBpZiAoIXBsYW4tPnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+
ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
U3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikp
OwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXgg
ZmZmZWU1YzEwZjU5ZjgxZjFiYmUzY2YxZDU0NzdjZjkwYzY4N2Y3MC4uZmI1NjFkOWRkYjg3ZTc0
MDcyOWE2MjliNTE4NjE3MDU0OTE2YmExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtNzMsOCAr
NzMsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFdhc20KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLCB2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpCi0gICAgICAg
IGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5m
aWVsZCkpOworICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhw
b3J0cykgeworICAgICAgICBJZGVudGlmaWVyIGZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIGV4cC5maWVsZCk7CisgICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5Ojpj
cmVhdGVMb2NhbChmaWVsZCwgZmllbGQpKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKQEAgLTg1LDE0ICs4NywxMyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdGFydEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UpCit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29w
ZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gaW5zdGFuY2UtPm1vZHVsZSgp
OwogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2Rl
QmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKQEAgLTExMiw3ICsxMTMsNyBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0
IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMg
dW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlz
dC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFu
IEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0
aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpT
IGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAg
aWYgKGV4cC5raW5kSW5kZXggPCBmdW5jdGlvbkltcG9ydENvdW50KSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IGV4cC5raW5kSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1
bmN0aW9uSW5kZXgpLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25J
bXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0
KSkKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0Owog
ICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTI4LDcgKzEyOSw3IEBAIHZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhCiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206
OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgm
dm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5j
ZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdh
c21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhw
b3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNzksNyArMTgwLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgYm9v
bCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBmYWxzZTsKICAgICAgICAgYm9vbCBpZ25vcmVS
ZWFkT25seUVycm9ycyA9IHRydWU7CiAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50
LCBleGVjLCBleHAuZmllbGQsIGV4cG9ydGVkVmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJv
ciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxl
UHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgZXhwLmZpZWxkKSwgZXhwb3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dS
ZWFkT25seUVycm9yLCBpZ25vcmVSZWFkT25seUVycm9ycywgcHV0UmVzdWx0KTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0KTsKICAgICB9CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdh
c206OlZvaWQpOwogICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxv
Y2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0
RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2UpLT5nZXQoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFu
Y2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAg
IG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKQEAgLTI1MSw3ICsyNTIsNyBAQCBKU1ZhbHVlIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2Vz
W2ldOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25J
bmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1
bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVu
Y3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlv
bihmdW5jdGlvbkluZGV4KS0+Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCog
ZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5j
dGlvbihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmgKaW5kZXggNWRjZWI0MmQ4ZjhjMjA2OTgyOTRiYWEwYzZiYmNmNDliOGRjZDQzZC4uMmI4Mzcy
ZTdjN2MzMzk0NzhlOWJlNzY1MTc3ZWI4NTI0MTZkNDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCkBAIC0z
Myw2ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rp
b247CiAKIC8vIEJhc2VkIG9uIHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBzcGVjaWZpY2F0aW9u
CkBAIC00Nyw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZCogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAg
ICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgdm9p
ZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwppbmRleCA0NWY5ZDlhYzFiMWZiYmNkNWNiOTFkN2ZhZWJlNDg5ZWQwNWI0OGY4
Li5mYzIyMzY2MzJkOGJkODU5NmVmMDQ2ZDNhMTcxZmQxNzg4MGFkNzM4IDEwMDY0NAotLS0gYS9K
U1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBA
CisyMDE3LTAzLTI3ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlL2NvbXBpbGUg
dHJ1bHkgYXN5bmNocm9ub3VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjkxODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHdhc20vYXNzZXJ0LmpzOgorICAgICAgICAqIHdhc20vanMtYXBpL01vZHVs
ZS1jb21waWxlLmpzOgorICAgICAgICAoYXN5bmMudGVzdFByb21pc2VBUEkpOgorICAgICAgICAq
IHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1jb21waWxlLXBhcmFsbGVsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGFzeW5jLnRocm93RXhuKToKKyAgICAgICAgKGFzeW5jLnRlc3QpOgorICAgICAgICAq
IHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qczogQWRkZWQu
CisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNzZW1i
bHktaW5zdGFudGlhdGUuanM6CisgICAgICAgIChhc3NlcnQuZXEuYXN5bmMudGVzdCk6CisgICAg
ICAgIChhc3NlcnQuZXEpOgorICAgICAgICAoYXNzZXJ0LmFzeW5jVGVzdC5hc3luYy50ZXN0KToK
KyAgICAgICAgKGFzc2VydC5hc3luY1Rlc3QpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeS5hc3lu
Yy50ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKGFzc2VydC50cnV0aHkpOiBEZWxldGVkLgorCiAy
MDE3LTAzLTIzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFtKU0NdIFVzZSBqc05vbnRyaXZpYWxTdHJpbmcgYWdyZXNzaXZlbHkgZm9yIFRvU3RyaW5n
KEludDUyKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pTVGVzdHMvd2Fz
bS9hc3NlcnQuanMKaW5kZXggZDFhYTA4N2Q1ZjZjZjE4YTM0MWJkYzcwNThhMmNiODdlOTU2Yzdm
Yy4uMDg5YzZiNTZlZGVlY2E4NGE4ZjNkOTdkY2EyZGZlNjdhNmY2NWQ3MyAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2Fzc2VydC5qcworKysgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCkBAIC0x
NDAsMyArMTQwLDI0IEBAIGV4cG9ydCB7CiAgICAgX3Rocm93cyBhcyB0aHJvd3MsCiAgICAgX2lu
c3RhbmNlb2YgYXMgaW5zdGFuY2VvZiwKIH07CisKK2NvbnN0IGFzeW5jVGVzdEltcGwgPSAocHJv
bWlzZSwgdGhlbkZ1bmMsIGNhdGNoRnVuYykgPT4geworICAgIGFzeW5jVGVzdFN0YXJ0KDEpOwor
ICAgIHByb21pc2UudGhlbih0aGVuRnVuYykuY2F0Y2goY2F0Y2hGdW5jKTsKK307CisKK2NvbnN0
IHByaW50RXhuID0gKGUpID0+IHsKKyAgICBwcmludCgiRmFpbGVkOiAiLCBlKTsKKyAgICBwcmlu
dChlLnN0YWNrKTsKK307CisKK2V4cG9ydCBjb25zdCBhc3luY1Rlc3QgPSAocHJvbWlzZSkgPT4g
YXN5bmNUZXN0SW1wbChwcm9taXNlLCBhc3luY1Rlc3RQYXNzZWQsIHByaW50RXhuKTsKK2V4cG9y
dCBjb25zdCBhc3luY1Rlc3RFcSA9IChwcm9taXNlLCBleHBlY3RlZCkgPT4geworICAgIGNvbnN0
IHRoZW5DaGVjayA9ICh2YWx1ZSkgPT4geworICAgICAgICBpZiAodmFsdWUgPT09IGV4cGVjdGVk
KQorICAgICAgICAgICAgcmV0dXJuIGFzeW5jVGVzdFBhc3NlZCgpOworICAgICAgICBwcmludCgi
RmFpbGVkOiBnb3QgIiwgdmFsdWUsICIgYnV0IGV4cGVjdGVkICIsIGV4cGVjdGVkKTsKKworICAg
IH0KKyAgICBhc3luY1Rlc3RJbXBsKHByb21pc2UsIHRoZW5DaGVjaywgcHJpbnRFeG4pOworfTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCmluZGV4IGYzNDNjNmU5M2M3MzEyNWU0
OWFkOTNmNGFhNzJhMWEwOWU2OWUyYmIuLjYzMjQzMDI3YmI5MjM2NzBjY2M4M2MxNTU3NmRkY2E1
ZDllYTZlNzMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUu
anMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwpAQCAtMSw3ICsx
LDYgQEAKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogaW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKLWxldCBkb25lID0gZmFsc2U7CiBhc3luYyBm
dW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICB7CiAgICAgICAgIC8vIENhbid0IGRlY2xh
cmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCkBAIC0xNCwzOSArMTMsMzAgQEAgYXN5bmMgZnVuY3Rp
b24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICAuQ29kZSgpCiAgICAgICAgICAgICAu
RW5kKCk7CiAKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwog
ICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlv
biBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSAoZXZhbHVhdGluZyAnV2Vi
QXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICAg
ICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3Qg
aWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50
cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7
CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKCk7
CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAg
ICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAg
IGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVm
ZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGls
ZSgpJykiKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAg
ICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgyMCk7CiAgICAgICAgIH0gY2F0Y2go
ZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRo
eShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3Nh
Z2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJh
eUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZSgyMCknKSIpOwogICAgICAg
ICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKQEAgLTYx
LDEwICs1MSw2IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgICAgICBs
ZXQgbW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFz
c2VtYmx5Lk1vZHVsZSk7CiAgICAgfQotCi0gICAgZG9uZSA9IHRydWU7CiB9CiAKLXRlc3RQcm9t
aXNlQVBJKCk7Ci1kcmFpbk1pY3JvdGFza3MoKTsKLWFzc2VydC50cnV0aHkoZG9uZSk7Cithc3Nl
cnQuYXN5bmNUZXN0KHRlc3RQcm9taXNlQVBJKCkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJmZWFl
Y2I5ZTg0MTcyODNlYzRhOWFhNzQ5ODJiOTRjYjQwOWQ2OAotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMKQEAgLTAs
MCArMSw1OCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBv
cnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworYXN5bmMgZnVuY3Rpb24gdGhyb3dF
eG4oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CisgICAgY29uc3QgbG9vcERlcHRoID0gMTA7CisgICAgY29uc3QgbnVtQ29tcGlsYXRpb25z
ID0gMTsKKyAgICBjb25zdCBudW1WYXJzID0gMzA7CisgICAgY29uc3QgcGFyYW1zID0gW107Cisg
ICAgcGFyYW1zLmxlbmd0aCA9IG51bVZhcnM7CisgICAgcGFyYW1zLmZpbGwoImkzMiIpOworCisg
ICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgp
CisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zLCByZXQ6ICJpMzIiIH0p
OworCisgICAgY29uc3QgbWFrZUxvb3AgPSAoYnVpbGRlciwgZGVwdGgpID0+IHsKKyAgICAgICAg
aWYgKGRlcHRoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisKKyAgICAgICAg
YnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgICAgIC5Mb29wKCJpMzIiLCAoYikgPT4geworICAg
ICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAg
IC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIKKworICAgIH0KKworICAgIGJ1aWxk
ZXIgPSBtYWtlTG9vcChidWlsZGVyLCBsb29wRGVwdGgpOworICAgIGJ1aWxkZXIgPSBidWlsZGVy
LkVuZCgpLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpOworCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2Vi
QXNzZW1ibHkuY29tcGlsZShiaW4pKTsKKyAgICB9CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChj
b21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5q
cyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVs
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI0NDdiY2FkMGI4ODgwNDc2YTc4M2JkZGMxYTk0MWNlYTQyNjBkY2UK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0
YW50aWF0ZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMn
OworCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0IGxvb3BEZXB0aCA9IDEwMDsK
KyAgICBjb25zdCBudW1Db21waWxhdGlvbnMgPSAxOworICAgIGNvbnN0IG51bVZhcnMgPSAzMDsK
KyAgICBjb25zdCBwYXJhbXMgPSBbXTsKKyAgICBwYXJhbXMubGVuZ3RoID0gbnVtVmFyczsKKyAg
ICBwYXJhbXMuZmlsbCgiaTMyIik7CisKKyAgICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigp
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
Lk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHsgaW5pdGlhbDogMCB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXMsIHJldDogImkzMiIgfSk7CisKKyAgICBjb25z
dCBtYWtlTG9vcCA9IChidWlsZGVyLCBkZXB0aCkgPT4geworICAgICAgICBpZiAoZGVwdGggPT09
IDApCisgICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKKworICAgICAgICBidWlsZGVyID0gYnVp
bGRlcgorICAgICAgICAgICAgLkxvb3AoImkzMiIsIChiKSA9PiB7CisgICAgICAgICAgICAgICAg
Yi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAgIC5UZWVMb2NhbCgwKQor
ICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgfQorCisgICAgYnVpbGRlciA9IG1ha2VMb29wKGJ1
aWxkZXIsIGxvb3BEZXB0aCk7CisgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuRW5kKCk7CisK
KyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IDAgfSk7CisgICAgY29u
c3QgaW1wb3J0T2JqZWN0ID0geyAiaW1wIjogeyAibWVtb3J5IjogbWVtb3J5IH0gfTsKKworICAg
IC8vIENvbXBpbGUgYSBidW5jaCBvZiBpbnN0YW5jZXMgaW4gcGFyYWxsZWwuCisgICAgbGV0IGNv
bXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25z
OyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUoYmluLCBpbXBvcnRPYmplY3QpKTsKKyAgICB9CisKKyAgICBsZXQgW2luc3RdID0gYXdhaXQg
UHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKyAgICBsZXQgbW9kdWxlID0gaW5zdC5tb2R1bGU7
CisKKyAgICAvLyBDb21waWxlIGEgYnVuY2ggb2YgaW5zdGFuY2VzIGZyb20gbW9kdWxlcyBpbiBw
YXJhbGxlbC4KKyAgICBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IG51bUNvbXBpbGF0aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgfQorCisgICAg
YXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKworICAgIC8vIENvbXBpbGUgYW4gaW5z
dGFuY2UgZnJvbSBhIG1vZHVsZSBpbiBwYXJhbGxlbCwgaGF2ZSBzeW5jIGNvbXBpbGF0aW9uIHN0
ZWFsIGl0LgorICAgIGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdl
YkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgaW5zdCA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGltcG9ydE9iamVjdCk7CisKKyAgICBh
d2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRl
c3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0
YW50aWF0ZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRl
LmpzCmluZGV4IGE5M2JjNjA1ZmYxN2RkZWU4MDFmN2E3NTMzNDE4NmE4NjFkNDQyYWQuLmZiNDg4
N2EwN2M0ZTc5MWViMzU1MDg3NjU4OTg1OTg5MGViMjE2NGUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCkBAIC0xOSwxOCArMTksMTQgQEAg
YXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25z
dCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZh
bHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIGxldCB7bW9kdWxlLCBp
bnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwogICAgICAgICBh
c3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAg
ICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5j
ZSk7CiAgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCksIDEpOwotICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rh
c2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRl
c3QoKSk7CiB9CiAKIHsKQEAgLTQ4LDE5ICs0NCwxNSBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHku
aW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rp
b24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0
YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpOwogICAgICAg
ICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJzZWNvbmQg
YXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVzdCBiZSB1bmRlZmluZWQgb3Ig
YW4gT2JqZWN0IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwp
JykiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0
KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAg
ICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTc4LDIwICs3MCwxNiBAQCBh
c3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0
IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFs
c2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAg
ICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZShiaW4pOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHko
ZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgICAgICAgICBhc3Nl
cnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6IGNv
bnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLCBpbiBmdW5jdGlvbiBhdCBp
bmRleCAwIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pJykiKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCB2YWxpZGF0ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUsIGlu
IGZ1bmN0aW9uIGF0IGluZGV4IDAiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0
LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAg
LTExMCwxOSArOTgsMTUgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0
aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAK
LSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2Vi
QXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKICAgICAgICAg
fSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGlt
cG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0aW5n
ICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJykiKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAgICAgICAgfQotICAgICAgICBk
b25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7
Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7
CiB9CiAKIHsKQEAgLTE0MSwyMCArMTI1LDE2IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0
YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0
ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gYXdhaXQg
V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKICAgICAg
ICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5
IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0
aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJyki
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAgICAgICAgfQotICAgICAg
ICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tz
KCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3Qo
KSk7CiB9CiAKIHsKQEAgLTE3MiwxOCArMTUyLDE0IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5p
bnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlv
biB0ZXN0KCkgewogICAgICAgICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOwogICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZShtb2R1bGUpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KGluc3RhbmNlIGluc3RhbmNlb2YgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UpOwogICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5m
b28oMjApLCAxKTsKLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQogCi0gICAgdGVzdCgpOwot
ICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7CisgICAgYXNz
ZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQogCiB7CkBAIC0yMDIsNyArMTc4LDYgQEAgYXNzZXJ0
LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4g
PSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwog
ICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBh
d2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CkBAIC0yMTAsMTAgKzE4NSw3IEBAIGFz
c2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogICAgICAgICAgICAg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCiAgICAgICAgICAgICBhc3NlcnQu
ZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcg
b3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKDI1
KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQogCi0gICAgdGVz
dCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7Cisg
ICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305520</attachid>
            <date>2017-03-27 15:41:31 -0700</date>
            <delta_ts>2017-03-27 16:31:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170327154130.patch</filename>
            <type>text/plain</type>
            <size>227936</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li5iZWU4NTI1ZDdkZmQ0NzRj
NTA0MzBmZDZkZTA4MzNhNzRlZWIxNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0U3Rh
cnQpOgorICAgICAgICAoZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQpOgorICAgICAgICAoZnVuY3Rp
b25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VB
cmd1bWVudHMpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlz
ZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVy
cmVkOjpwcm9taXNlQXN5bmNQZW5kaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5jcHAuCisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6Cisg
ICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKToKKyAgICAgICAgKEpTQzo6
SlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9v
cFRpbWVyOjp0aW1lckRpZEZpcmUpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcik6
CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24pOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayk6CisgICAgICAgICogcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmguCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzdG9w
UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6OnJlamVj
dCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlND
OjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpj
b21waWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUluc3RhbnRp
YXRlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAg
ICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpwbGFuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6cnVubmFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjplcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxsZWVzKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAq
IHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11
bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpoYXNSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjp0
YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJ
bmZvcm1hdGlvbjo6bW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpNb2R1bGVQYXJzZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENv
dW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxp
emVDYWxsZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OmRvbnRGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmV4cG9ydHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbnRlcm5hbEZ1bmN0aW9u
Q291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlTW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlQ2FsbExpbmtJbmZvcyk6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnRha2VXYXNtRXhpdFN0dWJzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6c2V0TW9kZUFuZFByb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGVuZGluZ1Byb21pc2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVycm9y
TWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNC
ZWVuUHJlcGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW5JbmxpbmVzLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmguCisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNt
L1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnByaW9yaXR5U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9yaXR5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6Oml0ZXJhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21w
bGV0ZVBsYW5TeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0
b3BBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpl
bnN1cmVXb3JrbGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6V29ya2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVk
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBhZnRlciB3ZSBkbyBUTFMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODI2N2QwMzEwODZlNTU2MDlj
OGI5ZWU3NmMyOTVmN2IyN2FkM2MzZi4uODI2N2FlYWQyYjA5ZGFkNDM2YzEwYzNiZGQ1ZTYyNjQ3
YWIxZWVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTAxLDcgKzUw
MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwUHJvZmlsZXIu
Y3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3QuY3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3RCdWls
ZGVyLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAogICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCiAgICAgaGVhcC9MYXJnZUFs
bG9jYXRpb24uY3BwCkBAIC04MDAsNiArNzk5LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKICAgICBydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCiAgICAgcnVudGltZS9KU1Byb3h5LmNwcAorICAg
IHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCiAgICAgcnVudGltZS9KU1Njb3BlLmNwcAogICAg
IHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcAogICAgIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAKQEAgLTg0OSw2ICs4NDksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHAKICAgICBydW50aW1lL09wdGlvbnMuY3Bw
CiAgICAgcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKKyAgICBydW50aW1lL1Byb21pc2VE
ZWZlcnJlZFRpbWVyLmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAogICAg
IHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAK
QEAgLTk0Miw2ICs5NDMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHdhc20v
V2FzbVBsYW4uY3BwCiAgICAgd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAogICAgIHdhc20vV2FzbVZh
bGlkYXRlLmNwcAorICAgIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCiAgICAgd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q2FsbGVlLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjAwMzEwYzM3YWIxNGE3MmRmNTdh
YjI5MWM4MmNhNzQwMzc4M2MwZC4uZWJhNGMzMjA3YmQzZmJiNjNhMmMwYjM4YTYyNzk4NThkYWQz
ZGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMTYsMTEgKzEzMTYsMTcg
QEAKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OworCQk1
MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlE
RCAvKiBXYXNtV29ya2xpc3QuY3BwICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIg
LyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEz
NzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdh
c21QbGFuLmNwcCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURF
MURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzAxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwICovOyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLzsgfTsKKwkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEgLyog
SlNSdW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAq
LzsgfTsKKwkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3
NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLzsgfTsKKwkJNTM0
NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc2MUU3MUUwNkUw
MEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMx
Nzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJ
CTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZG
M0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgKi87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNC
OCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVz
dC5jcHAgKi87IH07CkBAIC0xMzU1LDYgKzEzNjEsNyBAQAogCQk1M0Y0MEU5NTFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQ
YXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovOyB9Owog
CQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTNGOEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGOEQxRkYxRTgzODdENDAwRDIx
MTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovOyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3
RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJNTNGRDA0RDMxRDdBQjI3
NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyog
V2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKQEAgLTIyMzMsOCArMjI0MCw2IEBACiAJ
CUMyQ0YzOUMxMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgx
MDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1
QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggKi87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBI
ZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAw
NTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAq
LzsgfTsKLQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAw
NTRFNDhEIC8qIEhlYXBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJl
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9Owog
CQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTM4MDAsMTEgKzM4MDUsMTcgQEAKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdv
cmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAzMUU3QTExNDYw
MDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbVdvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNSdW5Mb29wVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRp
bWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYx
MkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAw
MTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBUeXBlZEFycmF5Q1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJy
YXlDVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ1LDYgKzM4NTYs
NyBAQAogCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNt
TW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2
QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4
N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3ODgsOCArNDgwMCw2IEBACiAJCUMyQ0YzOUJGMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBw
ZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVy
T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQjE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MDQsOCArNTkxNCw2IEBACiAJCQkJQTU0QzJBQUYx
QzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovLAogCQkJCUE1MzExQzM0MUM3N0NF
QUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLywKIAkJCQlBNTMxMUMzNTFD
NzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oICovLAotCQkJCUMyRTUyNkJC
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAotCQkJCUMyRTUyNkJDMTU5MEVG
MDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5j
cmVtZW50YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCkBAIC02MjczLDExICs2MjgxLDE0IEBACiAJCQkJNTNG
NDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFE
NUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYw
MEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAv
KiBXYXNtUGxhbklubGluZXMuaCAqLywKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2ln
bmF0dXJlLmggKi8sCiAJCQkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0
ZS5jcHAgKi8sCiAJCQkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5o
ICovLAorCQkJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICov
LAorCQkJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NDM0
LDYgKzY0NDUsOCBAQAogCQkJCTE0QTE1NjMwMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFu
Y2VDYWNoZS5oICovLAogCQkJCUJDRDIwMzQ3MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90
eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlw
ZS5oICovLAorCQkJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAgKi8sCisJCQkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZl
cnJlZFRpbWVyLmggKi8sCiAJCQkJMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVBy
b3BlcnR5QXR0cmlidXRlcy5oICovLAogCQkJCTBGRTA1MDBGMUFBOTA5MTEwMEQzM0IzMyAvKiBE
aXJlY3RBcmd1bWVudHMuY3BwICovLAogCQkJCTBGRTA1MDEwMUFBOTA5MTEwMEQzM0IzMyAvKiBE
aXJlY3RBcmd1bWVudHMuaCAqLywKQEAgLTY4MjIsNiArNjgzNSw4IEBACiAJCQkJMEY3QzM5RkMx
QzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJCQlCQ0QyMDJC
RjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJD
MDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzIx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQk3MEIwQTlEMDFBOUI2
NjIwMDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggKi8sCiAJCQkJNTI3NzczREQxQUFGODNBQzAw
QkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLywKIAkJCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFE
QkEgLyogUnVudGltZVR5cGUuaCAqLywKQEAgLTgxMTYsNiArODEzMSw3IEBACiAJCQkJMEZFQzg1
MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0Nv
bXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDgg
LyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMzUsNiArODI1MSw3IEBACiAJCQkJ
QkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFt
ZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRC
Q0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODUyMSw2
ICs4NTM4LDcgQEAKIAkJCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVy
U2V0dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyog
RE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0MwOEUzQzFEQTQxQjgxMDAz
OTQ3OEYgLyogRE9NSklUUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzEx
RTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM3QUQ4M0MxREE0OTI4NjAwRjNENDEyIC8qIERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzN0FEODNEMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRSZWcuaCBp
biBIZWFkZXJzICovLApAQCAtODY5MCw3ICs4NzA4LDYgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0
MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFD
NjU0NEYyMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMx
MUMzNjFDNzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJl
dHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzksNiArOTE1Niw3IEBACiAJCQkJQkMx
OEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3
MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4
MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdC
MjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5NTgsNiArOTk3
Niw3IEBACiAJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMEZCMzA0MUU3
QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0
MjJBNjIxQzE1OEU2QTAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzM4REY1MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0
YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI1MSw2ICsxMDI3MCw3IEBACiAJCQkJ
MTRBRDkxMTcxRENBOTdGRDAwMTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3MzQxRTIxREMyQ0U5NjAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1NDk4MjAzMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3Au
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM0NjM4NzMxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZD
QSAvKiBFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MEMxOUIxRDc3NkE5ODAw
ODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxMkRFMEYxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDMyOCw3ICsxMDM0OCw2IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYz
IC8qIEhlYXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVF
MDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3
MUM3N0NFQ0EwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUMyRTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElD
U3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8q
IElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDY1Miw2ICsxMDY3MSw3IEBACiAJ
CQkJOTkyQUJDRjkxQkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyRjU2QjQxRTRFODRBNDAwMzU5NTNCIC8qIFJlbW90ZUNv
bm5lY3Rpb25Ub1RhcmdldENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4RUQ2NzQxQkVE
NzBBQzAwREQ4MDE3IC8qIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90
ZUluc3BlY3Rpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NTY2ODYxRTRFOEIw
RjAwQUFFMTNDIC8qIFJlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJG
NTZCNTFFNEU4NEE4MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlD
YWxsYmFjay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNr
LmgKaW5kZXggZGRlZTI1ODNlNDllNmI5NjkzOTA4MGUzMzhlYjVhOTljMDQwYjkyYy4uYWY0NzU4
OGQ2MDExOWFkOGRkNTE1ZDhmNGE1MGNmYzcyOTU4MTMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxv
b3BUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRikKQEAgLTQw
LDggKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
OwogY2xhc3MgSGVhcDsKIAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxi
YWNrIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKICAgICBzdGF0aWMgUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IGNyZWF0ZUZ1bGxUaW1lcihIZWFwKik7CiAgICAgc3RhdGljIFJlZlB0cjxHQ0Fj
dGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZUVkZW5UaW1lcihIZWFwKik7CiAKQEAgLTcwLDIxICs3MSwy
MSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBVU0UoQ0YpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZN
KiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAg
ICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsK
ICAgICB9CiAjZWxpZiBVU0UoR0xJQikKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQot
ICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1f
ZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiAgICAgewogICAgIH0K
ICNlbHNlCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGlt
ZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAg
ICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRp
bWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTYxMjhkMDM4MzhjYTRhNzQ1NTBlZDkxNmRmNzdh
MzI1ZDZiNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIK
LQotI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIK
LSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGli
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgCi1jb25z
dCBDRlRpbWVJbnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1
ICogMTA7Ci0KLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0g
ICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCi17Ci0gICAgc2V0UnVuTG9vcCh2bS0+aGVh
cC5ydW5Mb29wKCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BS
ZWYgcnVuTG9vcCkKLXsKLSAgICBpZiAobV9ydW5Mb29wKSB7Ci0gICAgICAgIENGUnVuTG9vcFJl
bW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkp
OwotICAgICAgICBtX3J1bkxvb3AuY2xlYXIoKTsKLSAgICAgICAgbV90aW1lci5jbGVhcigpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAocnVuTG9vcCkgewotICAgICAgICBtX3J1bkxvb3AgPSBydW5M
b29wOwotICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVy
Q29udGV4dCkpOwotICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7Ci0gICAgICAgIG1fdGlt
ZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNf
ZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRl
eHQpKTsKLSAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVy
LmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIH0KLX0KLQotSGVhcFRpbWVyOjp+
SGVhcFRpbWVyKCkKLXsKLSAgICBzZXRSdW5Mb29wKDApOwotfQotCi12b2lkIEhlYXBUaW1lcjo6
dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotewotICAg
IEhlYXBUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihjb250ZXh0UHRyKTsK
LSAgICB0aW1lci0+bV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBSZWZQdHI8Vk0+IHZtID0gdGlt
ZXItPm1fYXBpTG9jay0+dm0oKTsKLSAgICBpZiAoIXZtKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBo
YXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIHRp
bWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKLSAgICAgICAgdGltZXIt
PmRvV29yaygpOwotICAgIH0KLQotICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotfQot
Ci12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMp
Ci17Ci0gICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7Ci0gICAgbV9pc1Nj
aGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci0g
ICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgKyBzX2RlY2FkZSk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNl
OwotfQotCi0jZWxpZiBVU0UoR0xJQikKLQotY29uc3QgbG9uZyBIZWFwVGltZXI6OnNfZGVjYWRl
ID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgaGVhcFRp
bWVyU291cmNlRnVuY3Rpb25zID0gewotICAgIG51bGxwdHIsIC8vIHByZXBhcmUKLSAgICBudWxs
cHRyLCAvLyBjaGVjawotICAgIC8vIGRpc3BhdGNoCi0gICAgW10oR1NvdXJjZSosIEdTb3VyY2VG
dW5jIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjYWxsYmFjayh1c2VyRGF0YSk7Ci0gICAgfSwKLSAgICBudWxscHRyLCAvLyBm
aW5hbGl6ZQotICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKLSAgICBudWxscHRyLCAv
LyBjbG9zdXJlX21hcnNoYWxsCi19OwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0g
ICAgOiBtX3ZtKHZtKQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotICAgICwgbV90
aW1lcihhZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNp
emVvZihHU291cmNlKSkpKQotewotICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCks
ICJbSmF2YVNjcmlwdENvcmVdIEhlYXBUaW1lciIpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewotICAg
ICAgICBhdXRvJiBoZWFwVGltZXIgPSAqc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4odXNlckRhdGEp
OwotICAgICAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShoZWFwVGltZXIubV90aW1lci5nZXQo
KSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSArIEhlYXBUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNf
UEVSX1NFQyk7Ci0gICAgICAgIGhlYXBUaW1lci50aW1lckRpZEZpcmUoKTsKLSAgICAgICAgcmV0
dXJuIEdfU09VUkNFX0NPTlRJTlVFOwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1
bHQoKSk7Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci0gICAgZ19zb3VyY2VfZGVz
dHJveShtX3RpbWVyLmdldCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSgp
Ci17Ci0gICAgbV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkg
ewotICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOwotICAg
ICAgICBkb1dvcmsoKTsKLSAgICB9Ci0KLSAgICBtX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12
b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17
Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rv
bmljX3RpbWUoKSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQot
ewotICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90
b25pY190aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1
bGVkID0gZmFsc2U7Ci19Ci0jZWxzZQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAg
IDogbV92bSh2bSkKLXsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLX0KLQotdm9p
ZCBIZWFwVGltZXI6OmludmFsaWRhdGUoKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1
bGVUaW1lcihkb3VibGUpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17
Ci19Ci0jZW5kaWYKLSAgICAKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI0NzFm
NjBkYjhjNjM3NGM1NTAxOThkMGJlOWUyZmNjYThhNmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBU
aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNp
bmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEpTTG9jazsKLWNsYXNzIFZNOwotCi1jbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8SGVhcFRpbWVyPiB7Ci1wdWJsaWM6Ci0gICAgSGVhcFRpbWVyKFZN
Kik7Ci0jaWYgVVNFKENGKQotICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BU
aW1lclJlZiwgdm9pZCopOwotI2VuZGlmCi0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKLQotICAg
IHZvaWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIHZvaWQg
Y2FuY2VsVGltZXIoKTsKLSAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NjaGVkdWxlZDsgfQotCi0jaWYgVVNFKENGKQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYpOwotI2VuZGlmIC8vIFVTRShDRikKLSAgICAKLXByb3Rl
Y3RlZDoKLSAgICBWTSogbV92bTsKLQotICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLSAg
ICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMg
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
VGltZXJSZWY+IG1fdGltZXI7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29w
OwotICAgIAotICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7Ci0KLSAgICBMb2Nr
IG1fc2h1dGRvd25NdXRleDsKLSNlbGlmIFVTRShHTElCKQotICAgIHN0YXRpYyBjb25zdCBsb25n
IHNfZGVjYWRlOwotICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7Ci0gICAgR1JlZlB0cjxHU291cmNl
PiBtX3RpbWVyOwotI2VuZGlmCi0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgaW52YWxpZGF0ZSgp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2
MzU2Njk0MTFlMTdkYzBhYzUyLi44Y2JmYTllODA0MGRjNjFlZmIwMTliMjE0NTU0NDU1ZTJmYTgz
MWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5jcHAKQEAgLTQxLDExICs0MSwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGlt
ZU11bHRpcGxpZXIgPSAxLjAgLyBzd2VlcFRpbWVUb3RhbDsKIAogdm9pZCBJbmNyZW1lbnRhbFN3
ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQogewotICAgIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihz
d2VlcFRpbWVTbGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOworICAgIEJhc2U6OnNjaGVkdWxl
VGltZXIoc3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKIH0KIAogSW5jcmVt
ZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBU
aW1lcihoZWFwLT52bSgpKQorICAgIDogQmFzZShoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50
QWxsb2NhdG9yKG51bGxwdHIpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCmluZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3Yzc4OWE2
YWUxMTk4MDNiZTYuLjc2ZDQ1NGYzYzA0YjMxYmQxMTRiODA3MTQzZTRkMWUxNWE0ZTViYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgi
CisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IEhlYXA7CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAKLWNsYXNzIEluY3JlbWVudGFsU3dlZXBl
ciA6IHB1YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGlj
IEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNSdW5Mb29wVGlt
ZXI7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW5jcmVtZW50YWxTd2VlcGVyKEhl
YXAqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTd2VlcGluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CmluZGV4IDZlMzE3NmMyY2M3NmI2ODQ0YzNhZmViMDczYzZiY2ExM2Y0NWQzY2MuLjk0MGQzOWRl
MjRhY2ZkMzJkOTZhNGFjMjFlZDJjMmE1MzE3YzIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNz
YXJ5VGltZXIoVk0qIHZtKQotICAgIDogSGVhcFRpbWVyKHZtKQorICAgIDogQmFzZSh2bSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmgKaW5kZXggYTY4MzE4NDc0ODljODZjMzZiNjg5ZTE4ZGEwNDg2M2ExZTRlZTQ0NS4uZTE4
MzZhMTRjOGVkNTJhMjU4ZjQ2MjA3MjM1YjA1NGI5Y2EyYWVhYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCkBAIC0yNSwxNCArMjUs
MTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRl
ICJKU1J1bkxvb3BUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAot
Y2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIFN0
b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSlNSdW5Mb29wVGltZXI7CiAgICAgZXhwbGljaXQgU3RvcElmTmVjZXNz
YXJ5VGltZXIoVk0qKTsKICAgICAKICAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oCmluZGV4IDZiODE5N2M2ODY2YTA1
OTk1YjMyYTg4YmU3OTQxZGQwZmQxYjkwYTYuLjIwNWZiMDRmYjY5MTQ3ZDhmZDVlNzJhZTEwYTAz
MmQ1MWUxM2Q5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVz
LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAppbmRleCBhZDRhMzE0MDhhNmIzNWIyOWQzYzU0YjkxYTM2OTBlNWU1MDEwYTQ3
Li5kZDZjYWZkMDc3ZmRhMTJhNWJhYzM0OWMyZTVjOTU1MDc2NjdiYTk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiUGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ1Byb2ZpbGVyLmgiCkBAIC03Myw4ICs3NCw5IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5l
clV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21X
b3JrbGlzdC5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNs
dWRlIDxzdGRpby5oPgpAQCAtOTA3LDggKzkwOSw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRH
ZXR0ZXJDb21wbGV4OjpzX2luZm8gPSB7ICJET01KSVRHZXR0ZXJDb21wbGV4IiwgJkJhc2U6OnNf
CiBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUpJ
VEZ1bmN0aW9uT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShET01KSVRGdW5jdGlvbk9iamVjdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJy
YXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogY29uc3QgQ2xhc3NJbmZvIFNpbXBs
ZU9iamVjdDo6c19pbmZvID0geyAiU2ltcGxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShTaW1wbGVPYmplY3QpIH07Ci1zdGF0aWMgYm9vbCB0ZXN0
MjYyQXN5bmNQYXNzZWQgeyBmYWxzZSB9Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jVGVzdCB7
IGZhbHNlIH07CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0UGFzc2VzIHsgMCB9Oworc3RhdGlj
IHVuc2lnbmVkIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzIHsgMCB9OwogCiBFbGVtZW50SGFuZGxl
T3duZXIqIEVsZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsKQEAgLTEwNzcsNiArMTA3OSw4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxl
clN0YWNrVHJhY2VzKEV4ZWNTdGF0CiAjZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdFN0YXJ0KEV4ZWNTdGF0
ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rl
c3RQYXNzZWQoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKEV4ZWNTdGF0ZSopOwpAQCAtMTM0OSw2ICsxMzUzLDkgQEAgcHJvdGVjdGVkOgogCiAgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAibWF4QXJndW1lbnRzIiwgZnVuY3Rpb25NYXhBcmd1bWVudHMs
IDApOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXN5bmNUZXN0U3RhcnQiLCBmdW5jdGlv
bkFzeW5jVGVzdFN0YXJ0LCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RQ
YXNzZWQiLCBmdW5jdGlvbkFzeW5jVGVzdFBhc3NlZCwgMSk7CisKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMi
LCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAtMTczMiwx
MSArMTczOSwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjU3Rh
dGUqIGV4ZWMsIEZJTEUqIG91dCkKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICh0ZXN0MjYyQXN5bmNU
ZXN0KSB7CisgICAgaWYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5n
KCkgJiYgV1RGOjplcXVhbChhc1N0cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRl
c3QyNjI6QXN5bmNUZXN0Q29tcGxldGUiKSkKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Bhc3Nl
ZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFs
dWUpLT52YWx1ZShleGVjKS5pbXBsKCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpIHsK
KyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlcysrOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtMzA0
OSw2ICszMDU3LDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhB
cmd1bWVudHMoRXhlY1N0YXRlKikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KEpTQzo6bWF4QXJndW1lbnRzKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Bc3luY1Rlc3RTdGFydChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1ZhbHVlIG51bWJlck9mQXN5bmNQYXNzZXMgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAg
ICBpZiAoIW51bWJlck9mQXN5bmNQYXNzZXMuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFeHBlY3RlZCBmaXJzdCBhcmd1
bWVudCB0byBhIHVpbnQzMiIpKTsKKworICAgIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzICs9IG51
bWJlck9mQXN5bmNQYXNzZXMuYXNVSW50MzIoKTsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZp
bmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rl
c3RQYXNzZWQoRXhlY1N0YXRlKikKK3sKKyAgICBhc3luY1Rlc3RQYXNzZXMrKzsKKyAgICByZXR1
cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
IHN0YXRpYyBDU3RyaW5nIHZhbHVlV2l0aFR5cGVPZldhc21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSB3YXNtVmFsdWUpCkBAIC0zMTU5LDIxICsz
MTg2LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVz
dFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsgMikKICAgICAgICAgQ1JBU0goKTsKIAotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2UtPnZlY3Rvcigp
KSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgcGxhbi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWls
ZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBs
YW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291cmNlLT52ZWN0b3Io
KSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206OlBsYW46OkZ1bGxDb21waWxlLCBXYXNtOjpQbGFu
Ojpkb250RmluYWxpemUpKTsKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxh
bi5jb3B5UmVmKCkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3lu
Y2hyb25vdXNseShwbGFuLmdldCgpKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFuLT5lcnJvck1lc3Nh
Z2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgaWYgKHBsYW4uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKKyAgICBpZiAocGxhbi0+aW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0goKTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
a2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7
Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXplQ2FsbGVlcygKICAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0g
MSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChqc0VudHJ5
cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMjA5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUq
IGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjYWxsZWVJbmRleDsKICAgICAgICAgICAg
IH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9u
ID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1v
ZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMzY2Niw3ICszNjk0LDcgQEAgdm9pZCBDb21tYW5k
TGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXN0MjYyLWFzeW5jIikpIHsKLSAgICAgICAg
ICAgIHRlc3QyNjJBc3luY1Rlc3QgPSB0cnVlOworICAgICAgICAgICAgYXN5bmNUZXN0RXhwZWN0
ZWRQYXNzZXMrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM3Mzgs
NDggKzM3NjYsNjQgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBjb25zdCBGdW5j
JiBmdW5jKQogICAgIFdvcmtlciB3b3JrZXIoV29ya2Vyczo6c2luZ2xldG9uKCkpOwogICAgIAog
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcigmdm0pOwotCiAgICAgaW50IHJlc3VsdDsKLSAgICBpZiAob3B0aW9ucy5t
X3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgdm0ubV9wZXJC
eXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9maWxlcjo6RGF0YWJhc2U+KHZt
KTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0Ojpj
cmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSksIG9w
dGlvbnMubV9hcmd1bWVudHMpOwotICAgIGdsb2JhbE9iamVjdC0+c2V0UmVtb3RlRGVidWdnaW5n
RW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVidWdnaW5nKTsKLSAgICBib29sIHN1Y2Nl
c3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3Rp
dmUgJiYgc3VjY2VzcykKLSAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
CisgICAgICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFByb2ZpbGVyOjpEYXRhYmFzZT4odm0pOwogCi0gICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7Ci0g
ICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAodGVzdDI2MkFzeW5jVGVzdCA9PSB0ZXN0MjYyQXN5bmNQ
YXNzZWQpID8gMCA6IDM7CisgICAgICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xv
YmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBq
c051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOworICAgICAgICBnbG9iYWxPYmplY3QtPnNl
dFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQob3B0aW9ucy5tX2VuYWJsZVJlbW90ZURlYnVnZ2luZyk7
CisgICAgICAgIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAo
b3B0aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCisgICAgICAgICAgICBydW5JbnRlcmFj
dGl2ZShnbG9iYWxPYmplY3QpOworCisgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOworICAg
IH0KKyNpZiBVU0UoQ0YpCisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnJ1blJ1bkxvb3Ao
KTsKKyNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMubV9leGl0Q29kZSkKLSAgICAgICAgcHJpbnRm
KCJqc2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsKKyAgICByZXN1bHQgPSBzdWNjZXNzICYmIChh
c3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9PSBhc3luY1Rlc3RQYXNzZXMpID8gMCA6IDM7CisKKyAg
ICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKSB7CisgICAgICAgIHByaW50ZigianNjIGV4aXRpbmcg
JWQiLCByZXN1bHQpOworICAgICAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgIT0gYXN5
bmNUZXN0UGFzc2VzKQorICAgICAgICAgICAgcHJpbnRmKCIgYmVjYXVzZSBleHBlY3RlZDogJWQg
YXN5bmMgdGVzdCBwYXNzZXMgYnV0IGdvdDogJWQgYXN5bmMgdGVzdCBwYXNzZXMiLCBhc3luY1Rl
c3RFeHBlY3RlZFBhc3NlcywgYXN5bmNUZXN0UGFzc2VzKTsKKyAgICAgICAgcHJpbnRmKCJcbiIp
OworICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSkgeworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgaWYgKCF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PnNhdmUob3B0aW9ucy5tX3Byb2ZpbGVyT3V0cHV0LnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgc2F2ZSBwcm9maWxlciBvdXRwdXQuXG4iKTsK
ICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25G
dXp6KCkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAl
dSBjaGVja3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgYm9vbCBm
aXJlQXRFbmFibGVkID0KLSAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFmdGVyKCk7
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmly
ZUF0RW5hYmxlZCB8fCBPcHRpb25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkp
KQotICAgICAgICBwcmludGYoIkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5jb3Vu
dGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVj
a3MoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKLSAgICAgICAgcHJp
bnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIs
IG51bWJlck9mU3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7Ci0gICAgICAgIHByaW50ZigiSlND
IE9TUiBFWElUIEZVWlo6IGVuY291bnRlcmVkICV1IGR5bmFtaWMgY2hlY2tzLlxuIiwgbnVtYmVy
T2ZPU1JFeGl0RnV6ekNoZWNrcygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBpbGVUaW1lU3Rh
dHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGls
ZVRpbWVLZXlzOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQotICAg
ICAgICBjb21waWxlVGltZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgc3RkOjpzb3J0KGNv
bXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOwotICAgIGZvciAo
Q1N0cmluZyBrZXkgOiBjb21waWxlVGltZUtleXMpCi0gICAgICAgIHByaW50ZigiJTQwczogJS4z
bGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VFeGNlcHRpb25GdXp6KCkpCisgICAgICAgICAgICBwcmludGYoIkpTQyBFWENFUFRJT04gRlVa
WjogZW5jb3VudGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tz
KCkpOworICAgICAgICBib29sIGZpcmVBdEVuYWJsZWQgPQorICAgICAgICBPcHRpb25zOjpmaXJl
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6QXRPckFmdGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9z
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVY
RUNVVEFCTEUgQUxMT0NBVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1i
ZXJPZkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElU
IEZVWlo6IGVuY291bnRlcmVkICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09T
UkV4aXRGdXp6Q2hlY2tzKCkpOworICAgICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVa
WjogZW5jb3VudGVyZWQgJXUgZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6
Q2hlY2tzKCkpOworICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29tcGlsZVRp
bWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpOworICAgICAgICBWZWN0b3I8Q1N0cmlu
Zz4gY29tcGlsZVRpbWVLZXlzOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tcGlsZVRp
bWVTdGF0cykKKyAgICAgICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsK
KyAgICAgICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtl
eXMuZW5kKCkpOworICAgICAgICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlzKQor
ICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGls
ZVRpbWVTdGF0cy5nZXQoa2V5KSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6
Z2NBdEVuZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2VEZWZlcnJlZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5jcHAKaW5kZXggNjk2N2UwM2FmZTE1NDI0NGQxZTJkMGNiMDNhNDYxMDg5
NDA1MDFkNS4uMWRhMDYwMWY4OTc4ZTEwZmY4OTNjYTMxZTFiM2U4ZmJkZDI1MmM2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk5
LDExICsxMDAsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIEpTVmFsdWUgdmFsdWUKIHZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNh
bGxGdW5jdGlvbihleGVjLCBtX3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1Bl
bmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJv
bWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0g
bV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlYXNvbikKIHsKICAgICBjYWxsRnVuY3Rp
b24oZXhlYywgbV9yZWplY3QuZ2V0KCksIHJlYXNvbik7CisgICAgYm9vbCB3YXNQZW5kaW5nID0g
ZXhlYy0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhp
cyk7CisgICAgQVNTRVJUX1VOVVNFRCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlz
ZUlzQXN5bmNQZW5kaW5nKTsKIH0KIAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiByZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCAyNmY0YTgyZDA4Y2EwMjIw
ZWRkNTE5Njg1Mjk4MjJiY2FiOWFjNmZkLi4wOTIyYTk0ZDkzM2NjZWM1OWE0YTE3ZmNiZDIyYzM3
MjNkYTUwY2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZURlZmVycmVkLmgKQEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIHByb21pc2VBc3luY1BlbmRpbmcoKSB7IG1fcHJvbWlzZUlzQXN5bmNQ
ZW5kaW5nID0gdHJ1ZTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2VEZWZl
cnJlZChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09i
amVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwpAQCAtNjQsNiArNjgsMTAgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBKU1Byb21pc2VEZWZlcnJlZChWTSYpOwogCisjaWZuZGVmIE5ERUJVRwor
ICAgIGJvb2wgbV9wcm9taXNlSXNBc3luY1BlbmRpbmcgeyBmYWxzZSB9OworI2VuZGlmCisKICAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fcHJvbWlzZTsKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9yZXNvbHZlOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlamVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZmMxMzkxYTY2MjZiMzg4ZjE0ZTE4MmM3MmFhZTNjZTZiNzZlODQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9v
cFRpbWVyLmgiCisKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoR0xJQikKKyNp
bmNsdWRlIDxnbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0Yp
CisKK2NvbnN0IENGVGltZUludGVydmFsIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICog
NjAgKiAyNCAqIDM2NSAqIDEwOworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0q
IHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKK3sK
KyAgICBzZXRSdW5Mb29wKHZtLT5oZWFwLnJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29w
VGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCit7CisgICAgaWYgKG1fcnVu
TG9vcCkgeworICAgICAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1f
dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgIENGUnVuTG9vcFRp
bWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7
CisgICAgICAgIG1fdGltZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAocnVuTG9vcCkgewor
ICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwg
MCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkpOworICAgICAgICBtX2NvbnRleHQuaW5m
byA9IHRoaXM7CisgICAgICAgIG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNh
ZGUsIHNfZGVjYWRlLCAwLCAwLCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250
ZXh0KSk7CisgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1l
ci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICB9Cit9CisKK0pTUnVuTG9vcFRp
bWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIHNldFJ1bkxvb3AoMCk7Cit9CisKK3ZvaWQg
SlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29u
dGV4dFB0cikKK3sKKyAgICBKU1J1bkxvb3BUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxKU1J1
bkxvb3BUaW1lcio+KGNvbnRleHRQdHIpOworICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsK
KworICAgIFJlZlB0cjxWTT4gdm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOworICAgIGlmICgh
dm0pIHsKKyAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KKyAgICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0uZ2V0KCkpOworICAgICAgICB0aW1lci0+ZG9Xb3JrKCk7CisgICAgfQorCisgICAgdGltZXIt
Pm1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0
TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsg
aW50ZXJ2YWxJblNlY29uZHMpOworICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOworfQorCit2b2lk
IEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXRO
ZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBz
X2RlY2FkZSk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorCisjZWxpZiBVU0UoR0xJ
QikKKworY29uc3QgbG9uZyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQg
KiAzNjUgKiAxMDsKKworc3RhdGljIEdTb3VyY2VGdW5jcyBKU1J1bkxvb3BUaW1lclNvdXJjZUZ1
bmN0aW9ucyA9IHsKKyAgICBudWxscHRyLCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwgLy8gY2hl
Y2sKKyAgICAvLyBkaXNwYXRjaAorICAgIFtdKEdTb3VyY2UqLCBHU291cmNlRnVuYyBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCisgICAgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxpemUKKyAg
ICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9t
YXJzaGFsbAorfTsKKworSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKyAg
ICA6IG1fdm0odm0pCisgICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCisgICAgLCBtX3Rp
bWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJkpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25z
LCBzaXplb2YoR1NvdXJjZSkpKSkKK3sKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdl
dCgpLCAiW0phdmFTY3JpcHRDb3JlXSBKU1J1bkxvb3BUaW1lciIpOworICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xl
YW4geworICAgICAgICBhdXRvJiBydW5Mb29wVGltZXIgPSAqc3RhdGljX2Nhc3Q8SlNSdW5Mb29w
VGltZXIqPih1c2VyRGF0YSk7CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHJ1bkxv
b3BUaW1lci5tX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSlNSdW5Mb29w
VGltZXI6OnNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBydW5Mb29wVGltZXIu
dGltZXJEaWRGaXJlKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9
LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19t
YWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworfQorCitKU1J1bkxvb3BUaW1lcjo6
fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkp
OworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoKQoreworICAgIG1fYXBp
TG9jay0+bG9jaygpOworCisgICAgaWYgKCFtX2FwaUxvY2stPnZtKCkpIHsKKyAgICAgICAgLy8g
VGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAg
ICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsKKyAgICAgICAgZG9Xb3JrKCk7
CisgICAgfQorCisgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BU
aW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVs
ZWQgPSB0cnVlOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cisg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rvbmlj
X3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVsZWQg
PSBmYWxzZTsKK30KKyNlbHNlCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZt
KQorICAgIDogbV92bSh2bSkKK3sKK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1l
cigpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUoKQoreworfQorCit2
b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKK3sKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworfQorI2VuZGlmCisgICAgCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgzZWNiOWNiYzQzYjgwZDMxZWY4YjZiMDQ5YzE3ZWY1YWM0ZmNi
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1
bkxvb3BUaW1lci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
TG9jazsKK2NsYXNzIFZNOworCitjbGFzcyBKU1J1bkxvb3BUaW1lciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxKU1J1bkxvb3BUaW1lcj4geworcHVibGljOgorICAgIEpTUnVuTG9vcFRp
bWVyKFZNKik7CisjaWYgVVNFKENGKQorICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1
bkxvb3BUaW1lclJlZiwgdm9pZCopOworI2VuZGlmCisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5KU1J1bkxvb3BUaW1lcigpOworICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7
CisKKyAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKKyAg
ICB2b2lkIGNhbmNlbFRpbWVyKCk7CisgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTY2hlZHVsZWQ7IH0KKworI2lmIFVTRShDRikKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKKyNlbmRpZiAvLyBVU0UoQ0YpCisKK3By
b3RlY3RlZDoKKyAgICBWTSogbV92bTsKKworICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsK
KyAgICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OworI2lmIFVTRShDRikKKyAgICBzdGF0
aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7CisKKyAgICBSZXRhaW5QdHI8Q0ZSdW5M
b29wVGltZXJSZWY+IG1fdGltZXI7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5M
b29wOworCisgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIExvY2sg
bV9zaHV0ZG93bk11dGV4OworI2VsaWYgVVNFKEdMSUIpCisgICAgc3RhdGljIGNvbnN0IGxvbmcg
c19kZWNhZGU7CisgICAgdm9pZCB0aW1lckRpZEZpcmUoKTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fdGltZXI7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKaW5kZXggZGE5OTZlYWEzYzZjY2I2MGJmMTA4YjY5OTczODQyNmY3MWE0OTY3
Yy4uYTBkOTEwOTBlNjJiY2RiMjY2MWMyODZkMzQ0NjcyN2M5MTUxNGU2NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtMjUyLDYgKzI1Miw3IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIG51bWJlck9mRlRMQ29t
cGlsZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDgsIDIpIC0gMSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJU
aHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZkZUTENvbXBpbGVyVGhy
ZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldvcmtlclRocmVhZHMoLTIsIDApLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZXYXNtQ29tcGlsZXJUaHJl
YWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVByb2ZpbGVyLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIs
IHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApAQCAtNDI4LDYgKzQyOSw5IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlQ29kZUNhY2hlLCB0cnVlLCBO
b3JtYWwsICJJZiBmYWxzZSwgdGhlIHVubGlua2VkIGJ5dGUgY29kZSBjYWNoZSB3aWxsIG5vdCBi
ZSB1c2VkLiIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9y
bWFsLCAiRXhwb3NlIHRoZSBXZWJBc3NlbWJseSBnbG9iYWwgb2JqZWN0LiIpIFwKKyAgICBcCisg
ICAgdihib29sLCBmYWlsVG9Db21waWxlV2ViQXNzZW1ibHlDb2RlLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgbm8gV2FzbTo6UGxhbiB3aWxsIHN1Y2Vzc2Z1bGx5IGNvbXBpbGUgYSBmdW5jdGlv
bi4iKSBcCisgICAgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhl
IGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmlt
dW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0
IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNt
IG1lbW9yeS4iKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9y
YWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc0YWY2OTE3OWEyYzBhYWY4NWFhYjk4YjFkYWRkMDJjODgzNzgwNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvbWlz
ZURlZmVycmVkVGltZXIuaCIKKworI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCisjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKK1Byb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcihW
TSYgdm0pCisgICAgOiBCYXNlKCZ2bSkKK3sKK30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1l
cjo6ZG9Xb3JrKCkKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7CisgICAgY2FuY2Vs
VGltZXIoKTsKKyAgICBpZiAoIW1fcnVuVGFza3MpCisgICAgICAgIHJldHVybjsKKworICAgIHdo
aWxlICghbV90YXNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHRp
Y2tldDsKKyAgICAgICAgVGFzayB0YXNrOworICAgICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2sp
ID0gbV90YXNrcy50YWtlTGFzdCgpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRG9p
bmcgd29yayBvbiBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgICAgIC8v
IFdlIG1heSBoYXZlIGFscmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMuCisgICAgICAgIGlm
IChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyh0aWNrZXQpKSB7CisgICAgICAgICAgICB0YXNr
KCk7CisgICAgICAgICAgICBtX3ZtLT5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gd2FpdGluZ1Rhc2tzID0gbV9ibG9ja2VkVGFza3MudGFrZSh0aWNrZXQpOwor
ICAgICAgICBmb3IgKGNvbnN0IFRhc2smIHVuYmxvY2tlZFRhc2sgOiB3YWl0aW5nVGFza3MpIHsK
KyAgICAgICAgICAgIHVuYmxvY2tlZFRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWlj
cm90YXNrcygpOworICAgICAgICB9CisgICAgfQorCisjaWYgVVNFKENGKQorICAgIGlmIChtX3Bl
bmRpbmdQcm9taXNlcy5pc0VtcHR5KCkgJiYgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9t
aXNlc0ZpbmlzaCkKKyAgICAgICAgQ0ZSdW5Mb29wU3RvcChtX3J1bkxvb3AuZ2V0KCkpOworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoQ0YpCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpydW5SdW5M
b29wKCkKK3sKKyAgICBBU1NFUlQoIW1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOworICAgIEFTU0VSVChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KTsKKyAgICBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFByb21pc2VzRmluaXNoID0gdHJ1ZTsK
KyAgICBpZiAobV9wZW5kaW5nUHJvbWlzZXMuc2l6ZSgpKQorICAgICAgICBDRlJ1bkxvb3BSdW4o
KTsKK30KKyNlbmRpZgorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJv
bWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYg
ZGVwZW5kZW5jaWVzKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLnNp
emUoKTsgKytpKQorICAgICAgICBBU1NFUlQoZGVwZW5kZW5jaWVzW2ldLmdldCgpICE9IHRpY2tl
dCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZCh0aWNrZXQsIFZl
Y3RvcjxTdHJvbmc8SlNDZWxsPj4oKSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJBZGRpbmcgbmV3IHBlbmRpbmcgcHJvbWlzZTog
IiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKKyAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJv
bmc8SlNDZWxsPigqbV92bSwgdGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBXVEZNb3ZlKGRlcGVuZGVuY2llcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgZGVwZW5kZW5jaWVzIGZvciBwcm9taXNlOiAiLCBS
YXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZFZlY3RvcihkZXBlbmRlbmNpZXMpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB0aWNr
ZXQtPnByb21pc2VBc3luY1BlbmRpbmcoKTsKKyNlbmRpZgorfQorCitib29sIFByb21pc2VEZWZl
cnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0
KQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
KyAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZSh0aWNrZXQpOworCisg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkNhbmNlbGluZyBw
cm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgYXV0byBibG9ja2VkVGFza3Mg
PSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7CisgICAgZm9yIChjb25zdCBUYXNrJiB0YXNr
IDogYmxvY2tlZFRhc2tzKQorICAgICAgICB0YXNrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVXb3JrU29vbihKU1Byb21pc2VE
ZWZlcnJlZCogdGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3Rhc2tMb2NrKTsKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUodGlja2V0LCBX
VEZNb3ZlKHRhc2spKSk7CisgICAgaWYgKCFpc1NjaGVkdWxlZCgpKQorICAgICAgICBzY2hlZHVs
ZVRpbWVyKDApOworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZUJsb2Nr
ZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiBibG9ja2luZ1RpY2tldCwgVGFzayYmIHRhc2spCit7
CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAg
IEFTU0VSVChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyhibG9ja2luZ1RpY2tldCkpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9ibG9ja2VkVGFza3MuYWRkKGJsb2NraW5nVGlja2V0LCBWZWN0b3I8
VGFzaz4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZSh0YXNr
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2MzYzMzZWI4
NzJkZTAwN2QzYWYxZmRhOGFlYjA3Zjk1MDQ0NDkzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKyNpbmNsdWRlICJTdHJv
bmcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTUHJv
bWlzZURlZmVycmVkOworY2xhc3MgVk07CitjbGFzcyBKU0NlbGw7CisKK2NsYXNzIFByb21pc2VE
ZWZlcnJlZFRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNSdW5Mb29wVGltZXI7CisKKyAgICBQcm9taXNlRGVmZXJyZWRUaW1lcihWTSYp
OworCisgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkUGVuZGluZ1By
b21pc2UoSlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5k
ZW5jaWVzKTsKKyAgICAvLyBKU1Byb21pc2VEZWZlcnJlZCBzaG91bGQgaGFuZGxlIGNhbmNlbGlu
ZyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAgIGJvb2wgY2Fu
Y2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqKTsKKworICAgIHR5cGVkZWYgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IFRhc2s7CisgICAgdm9pZCBzY2hlZHVsZVdvcmtTb29uKEpTUHJv
bWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAgIC8vIEJsb2NrZWQgdGFza3Mgc2hvdWxkIG9u
bHkgYmUgcmVnaXN0ZXJlZCB3aGlsZSBob2xkaW5nIHRoZSBKUyBBUEkgbG9jay4gSWYgd2UgZGlk
bid0IHJlcXVpcmUgaG9sZGluZyB0aGUKKyAgICAvLyBKUyBBUEkgbG9jayB0aGVuIHRoZXJlIG1p
Z2h0IGJlIGEgcmFjZSB3aGVyZSB0aGUgcHJvbWlzZSB5b3UgYXJlIHdhaXRpbmcgb24gaXMgcnVu
IGJlZm9yZSB5b3VyIHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVkLgorICAgIHZvaWQgc2NoZWR1
bGVCbG9ja2VkVGFzayhKU1Byb21pc2VEZWZlcnJlZCosIFRhc2smJik7CisKKyAgICB2b2lkIHN0
b3BSdW5uaW5nVGFza3MoKSB7IG1fcnVuVGFza3MgPSBmYWxzZTsgfQorI2lmIFVTRShDRikKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blJ1bkxvb3AoKTsKKyNlbmRpZgorCitwcml2YXRl
OgorICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBMb2NrIG1fdGFza0xvY2s7CisgICAgYm9vbCBtX3J1
blRhc2tzIHsgdHJ1ZSB9OworI2lmIFVTRShDRikKKyAgICBib29sIG1fc2hvdWxkU3RvcFJ1bkxv
b3BXaGVuQWxsUHJvbWlzZXNGaW5pc2ggeyBmYWxzZSB9OworI2VuZGlmCisgICAgVmVjdG9yPHN0
ZDo6dHVwbGU8SlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrPj4gbV90YXNrczsKKyAgICBIYXNoTWFw
PEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFRhc2s+PiBtX2Jsb2NrZWRUYXNrczsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4
IDg1MTE1NDJiNzdkZmM4ZTZmMmJlYWJmMWY4OTNjNzczOWFiNzRiMzguLmZlZTBiMzM5ZWYyNTcy
YTVhZWQxMWRiODZhMTExNGM0NDZhMTliN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQ
cm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgpAQCAtMTAzLDYgKzEwNCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1
ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vh
a0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCkBAIC0xNzcsNiArMTc5
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY2xp
ZW50RGF0YSgwKQogICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxs
RnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIo
c3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9h
dG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEoKS5hdG9t
aWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0cmluZ1RhYmxlKQogICAgICwgcHJvcGVydHlO
YW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQpAQCAtMzU2LDYgKzM1
OSwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAKIFZNOjp+
Vk0oKQogeworICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmluZ1Rhc2tzKCk7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChXYXNtOjpleGlzdGluZ1dvcmtsaXN0T3JO
dWxsKCkpCisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yVk0o
KnRoaXMpOworI2VuZGlmCiAgICAgaWYgKFVOTElLRUxZKG1fd2F0Y2hkb2cpKQogICAgICAgICBt
X3dhdGNoZG9nLT53aWxsRGVzdHJveVZNKHRoaXMpOwogICAgIG1fdHJhcHMud2lsbERlc3Ryb3lW
TSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOWQ4NmFhMTlhOTMzY2VhMzhh
YjVmMDIzMTg0NDU5Y2I2MDEwZjNiNy4uODFiODJlOTlhOTRkZWRiM2MzYTFjN2MyNjM2OWY2YmMy
ZjIwOTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDcg
QEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOworY2xhc3MgUHJv
bWlzZURlZmVycmVkVGltZXI7CiBjbGFzcyBSZWdFeHBDYWNoZTsKIGNsYXNzIFJlZ2lzdGVyOwog
Y2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CkBAIC0zODAsNiArMzgxLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6b25jZV9mbGFnIG1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZsYWc7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uPiBtX3dhc21TaWdu
YXR1cmVJbmZvcm1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlRGVm
ZXJyZWRUaW1lcj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAgICAgCiAgICAgSlNDZWxsKiBjdXJy
ZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwogICAgIGNvbnN0IENsYXNzSW5mbyogY3Vy
cmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENsYXNzSW5mbzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKaW5kZXggZmNkYzhjZGRjNGRhNjhkZDlk
Y2UxOTkwZDlkOTkxMmVkZDI5ZDY2OC4uYmZmZThmMzk1YmYwN2M0M2Q1ZGZhZDlmZWU2MWVhM2Mz
Yjk2NGExNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5j
cHAKQEAgLTMzLDEwICszMywxNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
UHJvbWlzZURlZmVycmVkVGltZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKK3VzaW5nIEpTQzo6V2FzbTo6UGxhbjsK
KwogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShKU1dlYkFzc2VtYmx5KTsKQEAgLTQ1LDQ1ICs1MiwxNjAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUq
KTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWplY3QoRXhlY1N0YXRl
KiBleGVjLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZSkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OworICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gY2F0Y2hTY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIEpTUHJv
bWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAg
ICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2Ci0gICAgSlNWYWx1ZSBtb2R1
bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlN
b2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hT
Y29wZS5leGNlcHRpb24oKSkgewotICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfQor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVz
OworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9iamVj
dCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9t
aXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9w
dFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHBy
b21pc2UsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAgICBSZWZQdHI8
UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURlZmVy
cmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJvbWlzZSwgZ2xv
YmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1ZhbHVlIG1vZHVsZSA9IEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1i
bHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKHBsYW4pKTsKKyAg
ICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogCi0gICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICAg
ICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICB9KTsKKyAgICB9KSk7
CisKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQogCitlbnVt
IGNsYXNzIFJlc29sdmUgeyBXaXRoSW5zdGFuY2UsIFdpdGhNb2R1bGVBbmRJbnN0YW5jZSB9Owor
c3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlv
bih2bSwgZXhlYyk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZW50cmllcyA9PSBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpCisgICAgICAgIHByb21pc2UtPnJl
c29sdmUoZXhlYywgaW5zdGFuY2UpOworICAgIGVsc2UgeworICAgICAgICBKU09iamVjdCogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJtb2R1bGUi
KSksIG1vZHVsZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5jZSIpKSwgaW5zdGFuY2UpOworICAg
ICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWxseSByZWNv
bXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgZ2F0aGVyIGFsbCB0aGUgaW1wb3J0L21lbW9yeSBp
bmZvcm1hdGlvbiBwcmlvciB0byBjb21waWxpbmcgY29kZS4KKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMs
IG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7
CisgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXM6CisgICAgLy8g
MSkgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGluaXRpYWxpemVkIENvZGVCbG9jaywgc28g
d2UgaGF2ZSBubyBtb3JlIHdvcmsgdG8gZG8uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBu
byBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUg
Zm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxp
emVkIENvZGVCbG9jaywgc28gc29tZW9uZSBlbHNlIGlzIGNvbXBpbGluZyBjb2RlIGFuZCB3ZSBq
dXN0IG5lZWQgdG8gd2FpdCBmb3IgdGhlbS4KKworICAgIGlmIChpbnN0YW5jZS0+aW5pdGlhbGl6
ZWQoKSkgeworICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9k
dWxlLCBlbnRyaWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTdHJv
bmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIC8vIFRoZSBpbnN0YW5jZSBrZWVwcyB0aGUg
bW9kdWxlIGFsaXZlLgorICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0s
IGluc3RhbmNlKSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9t
aXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBpZiAoaW5zdGFuY2Ut
PmNvZGVCbG9jaygpKSB7CisgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVs
ZUJsb2NrZWRUYXNrKGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cGxhbigpLnBlbmRpbmdQcm9taXNl
KCksIFsmdm0sIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdICgpIHsKKyAgICAg
ICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
ZW50cmllcyk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VS
VCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHJlcGFyc2Vz
IHRoZSBtb2R1bGUgaGVhZGVyLCB3aGljaCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgorICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgpLCBQ
bGFuOjpGdWxsQ29tcGlsZSwgW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdIChQ
bGFuJiBwKSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAg
ICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9t
aXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllcywgcGxhbiA9IFdURk1vdmUo
cGxhbildICgpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKKyAgICAgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1
bGUsIGVudHJpZXMpOworICAgICAgICB9KTsKKyAgICB9KSk7CisKKyAgICBpbnN0YW5jZS0+YWRk
VW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsKKyAgICBwbGFuLT5zZXRN
b2RlQW5kUHJvbWlzZShpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBwcm9taXNlKTsKKyAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2
bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgZGVwZW5k
ZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2JqZWN0KSk7CisgICAgdm0u
cHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUo
ZGVwZW5kZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxh
bih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3NvdXJjZSwgcHJvbWlzZSwgaW1wb3J0
T2JqZWN0LCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsKKyAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZl
cnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtzb3VyY2UsIHByb21pc2UsIGlt
cG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBl
eGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUo
c291cmNlKSwgcGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc3Rh
bnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6
V2l0aE1vZHVsZUFuZEluc3RhbmNlKTsKKyAgICAgICAgfSk7CisgICAgfSkpOworCisgICAgV2Fz
bTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworfQorCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gY2F0Y2hTY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBB
UEkgdHJ1bHkgYXN5bmNocm9ub3VzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MTg3Ci0KICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0g
ICAgYXV0byByZWplY3QgPSBbJl0gKCkgewotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOwotICAg
ICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVj
dChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfTsKLQogICAgIEpTVmFsdWUgaW1wb3J0QXJn
dW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0g
aW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1Vu
ZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpIHsKQEAgLTkzLDI5ICsyMTUsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgfQogCiAgICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gZXhlYy0+YXJn
dW1lbnQoMCk7Ci0gICAgSlNWYWx1ZSBtb2R1bGU7Ci0gICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNN
b2R1bGUgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RBcmd1bWVudC5pbmhlcml0cyh2bSwgSlNXZWJB
c3NlbWJseU1vZHVsZTo6aW5mbygpKSkgewotICAgICAgICBmaXJzdEFyZ3VtZW50SXNNb2R1bGUg
PSB0cnVlOwotICAgICAgICBtb2R1bGUgPSBmaXJzdEFyZ3VtZW50OwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVs
ZShleGVjLCBmaXJzdEFyZ3VtZW50LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgICAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
OjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KG1vZHVs
ZSksIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4gcmVqZWN0KCk7Ci0KLSAgICBpZiAoZmlyc3RBcmd1bWVudElzTW9kdWxl
KQotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwot
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUpOwotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFu
Y2UiKSksIGluc3RhbmNlKTsKLSAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1bHQp
OwotICAgIH0KKyAgICBpZiAoYXV0byogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2Vt
Ymx5TW9kdWxlKj4odm0sIGZpcnN0QXJndW1lbnQpKQorICAgICAgICBpbnN0YW50aWF0ZSh2bSwg
ZXhlYywgcHJvbWlzZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhJbnN0YW5j
ZSk7CisgICAgZWxzZQorICAgICAgICBjb21waWxlQW5kSW5zdGFudGlhdGUodm0sIGV4ZWMsIHBy
b21pc2UsIGZpcnN0QXJndW1lbnQsIGltcG9ydE9iamVjdCk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9CkBAIC0xMjksNyArMjMyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRX
YXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBi
eXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXpl
KTsKKyAgICBXYXNtOjpQbGFuIHBsYW4odm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwg
UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKTsKICAgICAvLyBGSVhNRTogV2Ug
bWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRo
YXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IGZlOGMzZjNiYTIw
YTZmZTY4MTVlYjE0NDBhNTdmYmRjMjI5YmZkOWMuLjA4YWJkYmMwMjFiODE4YzM5NTU5NjE2OWEx
Y2RhMjQ1ZGU5OGU1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJQcm9t
aXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIK
ICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtMzksMTQg
KzQwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNs
YXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47
Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlu
a0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiBleGl0U3R1YnMsIFdhc206Ok1l
bW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVy
LCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNtOjpQbGFuPiYmIHBsYW4sIHVuc2lnbmVk
IGNhbGxlZUNvdW50KQogICAgIHsKLSAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlv
blNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIHN0
ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2Fy
ZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxlZUNv
dW50KTsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291
bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdURk1vdmUocGxh
biksIGNhbGxlZUNvdW50KTsKICAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNTksNyArNjQsMTYgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21F
eGl0U3R1YnMuc2l6ZSgpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLSAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNz
ZW1ibHlNZW1vcnkqKTsKKworICAgIC8vIERvbid0IGNhbGwgaW50aWFsaXplIGRpcmVjdGx5LCB0
aGlzIHNob3VsZCBiZSBjYWxsZWQgZm9yIHlvdSwgYXMgbmVlZGVkLCBieSBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24uCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
Ym9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BsYW47IH0KKworICAgIFdhc206
OlBsYW4mIHBsYW4oKSBjb25zdCB7IEFTU0VSVCghaW5pdGlhbGl6ZWQoKSk7IHJldHVybiAqbV9w
bGFuOyB9CisKKyAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbGl6ZWQo
KSAmJiAhbV9lcnJvck1lc3NhZ2U7IH0KKyAgICBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIHsgQVNT
RVJUKCFydW5uYWJsZSgpKTsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CisgICAgYm9vbCBpc1Nh
ZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CiAKICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CkBAIC04OSwxMCArMTAzLDcgQEAgcHVibGljOgog
ICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRo
aXMsIGNhbGxlZSk7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IG9mZnNldE9mQ2FsbGVlcygpKTsKLSAgICB9CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRP
ZkNhbGxlZXMoKSk7IH0KIAogICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5z
aWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewpAQCAtMTAxLDcgKzExMiw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4mJiwgV2FzbTo6TWVtb3J5TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOworICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgV2FzbTo6TWVt
b3J5TW9kZSwgUmVmPFdhc206OlBsYW4+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0xMjUsNiAr
MTM2LDkgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICAvLyBU
aGUgcGxhbiB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUgYmxvY2suCisgICAgUmVmUHRyPFdh
c206OlBsYW4+IG1fcGxhbjsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgV2FzbTo6
TWVtb3J5TW9kZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXgg
ZmFjNTdhZGRhZjA3NGU5YThjZmU2MDYzMzM1ZjMwZGEyZTk2ZDNhMi4uYWI3MjAwZWRkNTMwNGZh
MmFjYmQ0OTlkODA1ZjNkMWQ5NmExNmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAg
IH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYpOworICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3Qp
OwpAQCAtMjIxLDYgKzIyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAg
IFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAg
IFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMjU4LDkgKzI1OSwxMCBAQCBzdGF0aWMg
dm9pZCBzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ss
IFZhbHVlKiBhcmcpCiAgICAgICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1l
bW9yeU1vZGUgbW9kZSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2luZm8oaW5mbykKKyAgICAs
IG1fbW9kZShtb2RlKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC00ODYsNyArNDg4
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWlu
dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1f
bWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSB7CisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAg
QVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0g
MSk7CkBAIC01MjIsNyArNTI0LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2Fk
T3BUeXBlIG9wKQogCiBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChC
Mzo6T3Bjb2RlIG1lbW9yeU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmcpCisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpCiAgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7CiAgICAgcmV0dXJuIG1l
bW9yeU9wOwogfQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dh
c21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW4K
ICAgICBqaXQucmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25D
b250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQs
IHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBt
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWduZWQg
b3B0TGV2ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+
LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0
dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdh
c21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xMjM2LDcgKzEyMzgsNyBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShWTSYgdm0sCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0g
c3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJv
Y2VkdXJlOwotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCBy
ZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKKyAgICBCM0lSR2VuZXJhdG9y
IGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFy
c2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMp
OwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAyNDlk
NTc4MTRhOTI4YzRiZjkyMDZiYzg1MjU2NGMzNmM3ODg5YTRlLi5kZTU2YTFjM2IyM2M1NzA0ZmUw
NTMxOWJkMGE4NWMzMWU3N2Y5YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAi
QyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENv
bXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRv
V2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21J
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNv
bnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBN
ZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3
YTY3MjlhNzFmYmRmMDUxNzRhMWNjYzExYTU2ZjYyNzFkY2ViYy4uNTU2OTQzNWY0MTJlNjZhNmQ3
NDhjMzM1OGJiZDE1MzUxY2U1MjI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBt
YWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogfQogCiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBJ
ZGVudGlmaWVyIG1vZHVsZTsKLSAgICBJZGVudGlmaWVyIGZpZWxkOworICAgIFN0cmluZyBtb2R1
bGU7CisgICAgU3RyaW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2ln
bmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGlu
ZyBraW5kLgogfTsKIAogc3RydWN0IEV4cG9ydCB7Ci0gICAgSWRlbnRpZmllciBmaWVsZDsKKyAg
ICBTdHJpbmcgZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWduZWQga2lu
ZEluZGV4OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQu
CiB9OwpAQCAtMjYwLDYgKzI2MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAg
fQogCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRl
cm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXgg
ZjJiOTQxMTVjYjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUzN2M3M2JhMi4uZDQyMDU2MGI3MjRlNGI0
NjU1ZDI2YWFjY2M3ZDRjZTIxYWQ0Y2E3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2FscyksICJjYW4ndCBnZXQgRnVu
Y3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGluIGdyb3VwICIsIGkpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKG51bWJlck9mTG9jYWxzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAiLCBpLCAidGggbG9jYWwgZ3JvdXAgY291
bnQgaXMgdG9vIGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSwgImNhbid0IGdldCBGdW5jdGlvbiBs
b2NhbCdzIHR5cGUgaW4gZ3JvdXAgIiwgaSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fY29udGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3Qg
YWRkICIsIG51bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9uIGxvY2FscyBmcm9tIGdyb3VwICIsIGkp
OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwg
bnVtYmVyT2ZMb2NhbHMpKTsKICAgICB9CiAKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlQm9keSgpKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdl
dCBpbmRleCBmb3IgZ2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
Y29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2NhbCBhdCBpbmRl
eCIsIGluZGV4KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5k
ZXgsIHJlc3VsdCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRl
eCksICJjYW4ndCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKLSAg
ICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIENhbGw6IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCBkMTNkMGM2NjJmOTg5ZDNlZGU0ZTRkZTA5ZjIyNDZj
Yzc5NzY2YTliLi40NGRhMGRmYzE3ODRkZGY1YzAwZDdiYjU5NDYzMDZhZTYwYTJiMjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC00NSw3ICs0NSw3IEBAIGNs
YXNzIFZNOwogbmFtZXNwYWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
b3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6
IHVpbnQ4X3QgewogICAgIEJvdW5kc0NoZWNraW5nLAogICAgIFNpZ25hbGluZywKICAgICBOdW1i
ZXJPZk1lbW9yeU1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCA4YWMwODY2Mjc4YjUxMzkzYjY2OWVhMDlhN2I1
NDhkNmQ5YTc2YjE0Li41OTA5ZmUzZmU4M2MxODgyODkyNTQzNGRlNjU2YWRhYTAxNDE3NzJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdp
c3RlckluZm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0K
IAotTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJl
Y29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5m
b3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1w
b3J0KQogICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkK
ICAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04MiwyOCArODIsNiBAQCBNZW1vcnlJbmZv
cm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdQogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFT
U0VSVCghISp0aGlzKTsKLQotICAgIGlmICghcmVjb21waWxlTW9kZSkgewotICAgICAgICBpZiAo
IWlzSW1wb3J0KSB7Ci0gICAgICAgICAgICBpZiAobWF4aW11bSAmJiBtYXhpbXVtLmJ5dGVzKCkg
PT0gMCkgewotICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0
ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKSk7Ci0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11bSgpLmJ5
dGVzKCkgPT0gMCk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+
bW9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhp
bXVtLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwotICAgICAgICAgICAgaWYgKG1fcmVzZXJ2ZWRN
ZW1vcnkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9yeSk7Ci0g
ICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX21v
ZGUgPSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
bW9kZSA9ICpyZWNvbXBpbGVNb2RlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aAppbmRleCA2ZGUwNzBhMTA0NTJmZjZiYjNjNWMyNTA0MTFmMTBlOTEzODllNGEyLi5kMTgyYzcz
Y2Q2NTM4OGNhZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMjIgKzU0LDE3
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5
SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9y
bWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9y
dCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsg
fQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0g
ICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1v
cnk7IH0KLSAgICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVCho
YXNSZXNlcnZlZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9
Ci0gICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9v
bCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2YXRl
OgotICAgIFJlZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1f
aW5pdGlhbCB7IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5TW9k
ZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0lt
cG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1
ZmQzZTRjM2QuLmU3MzZiYmYyZjE3MzJhZTI4NDg0NGYzNGUyOTk4ODMzY2I4Njg1MjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0x
NjIsMTEgKzE2MiwxMSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0
aWFsUmVzdWx0CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
bW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1
bGUgbmFtZSBsZW5ndGgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVU
RjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51
bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4pOwot
ICAgICAgICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVT
dHJpbmcpOworICAgICAgICBpbXAubW9kdWxlID0gbW9kdWxlU3RyaW5nOwogCiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUg
JyIsIG1vZHVsZVN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4s
ICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIGltcC5maWVsZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBpbXAu
ZmllbGQgPSBmaWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZUV4dGVybmFsS2luZChpbXAua2luZCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3Mga2luZCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBzd2l0Y2ggKGltcC5raW5kKSB7CkBAIC0zMTYsNyAr
MzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBv
cnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAg
QVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBh
Z2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0
aW9uKCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlz
SW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9u
KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1
cm4geyB9OwogfQogCkBAIC0zNzYsNyArMzc2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
RXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFj
b25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4
cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVu
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVs
ZFN0cmluZyksICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAg
ICAgIGV4cG9ydE5hbWVzLmFkZChmaWVsZFN0cmluZyk7Ci0gICAgICAgIGV4cC5maWVsZCA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBleHAuZmll
bGQgPSBmaWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4
dGVybmFsS2luZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhw
b3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwgImNhbid0IGdldCAi
LCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmgKaW5kZXggYzk2MThiNTdjYTQyMmYwMWZlOWY3OWY0YzE3OTUxYTBlYjZiNzUwZS4uNTBh
Mjg5MzVlZjEzZjk2MjBmYTE1Njg0MTc2YjE3ZTg0ZDY2YzJiYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtNDQsOSArNDQsOSBAQCBzdHJ1
Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJz
ZXI8TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKKworICAgIE1vZHVsZVBhcnNlcihWTSogdm0s
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICAg
ICAgOiBQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgICAgICAsIG1f
bW9kZShtb2RlKQogICAgIHsKICAgICB9CiAKQEAgLTY2LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3Qm
LCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1
bHQgbV9yZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtX21vZGUgeyBzdGQ6
Om51bGxvcHQgfTsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGI2NTQyNDkyNjQ4MTBhZmUwOWEx
NzA5OTUwNGY1NjMwYmY4NjVjYzYuLjFlZDJiMmY4NTM2NTlmYTI3MmVkZGUwMTFhOThlYjYwYmM0
OGViOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTQyLDcg
KzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJP
ZkNvcmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9T
eXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAt
NTAsMzAgKzQ5LDY1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi1QbGFuOjpQbGFuKFZNKiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNv
dXJjZS5zaXplKCkpCisKK1BsYW46OlBsYW4oVk0mIHZtLCBBcnJheUJ1ZmZlciYgc291cmNlLCBB
c3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogUGxhbih2bSwgcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlLmRhdGEoKSksIHNvdXJjZS5ieXRlTGVuZ3Ro
KCksIHdvcmssIFdURk1vdmUodGFzaykpCit7Cit9CisKK1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0
b3I8dWludDhfdD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKKyAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCksIHdvcmssIFdU
Rk1vdmUodGFzaykpCiB7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBz
b3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCitQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWlu
dDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQogICAgIDogbV92bSh2bSkKKyAgICAsIG1fY29tcGxldGlvblRhc2so
dGFzaykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJj
ZUxlbmd0aCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCit7Cit9CisKK2NvbnN0IGNoYXIqIFBs
YW46OnN0YXRlU3RyaW5nKFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAg
ICBjYXNlIFN0YXRlOjpJbml0aWFsOiByZXR1cm4gIkluaXRpYWwiOworICAgIGNhc2UgU3RhdGU6
OlZhbGlkYXRlZDogcmV0dXJuICJWYWxpZGF0ZWQiOworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVk
OiByZXR1cm4gIlByZXBhcmVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21waWxlZDogcmV0dXJuICJD
b21waWxlZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxldGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGxh
bjo6bW92ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID4gbV9zdGF0
ZSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIm1vdmluZyB0byBzdGF0ZTogIiwgc3RhdGVT
dHJpbmcoc3RhdGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKG1fc3RhdGUpKTsKKyAg
ICBtX3N0YXRlID0gc3RhdGU7Cit9CisKK3ZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOworICAgIG1f
ZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGNvbXBsZXRlKGxvY2tl
cik7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25p
Y1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBp
bGVUaW1lcygpKQogICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAog
ICAgIHsKLSAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwg
bV9zb3VyY2VMZW5ndGgsIHJlY29tcGlsZU1vZGUpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9k
dWxlUGFyc2VyKCZtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBhdXRv
IHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VS
ZXN1bHQpIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3Io
KTsKKyAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3Vs
dC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBA
IC04Miw1MiArMTE2LDQ4IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgfQogCiAgICAgZm9yICh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5n
IGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydCwg
IiBhbmQgZW5kaW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbklu
ZGV4XS5lbmQpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5j
dGlvbiBzdGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25J
bmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbZnVuY3Rpb25JbmRleF0uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25T
dGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRl
eF0uc3RhcnQ7CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGgg
PD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1f
dm0sIHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1Vu
aXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0g
dmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQp
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0
W2ldKSksICIsICIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1
bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVu
Y3Rpb25JbmRleCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAg
ICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJv
cigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbklu
ZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25z
OjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25v
dG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFs
aWRhdGUgbW9kdWxlIik7CisgICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAg
ICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgIGVsc2UKKyAgICAgICAgbW92ZVRv
U3RhdGUoU3RhdGU6OlZhbGlkYXRlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFdlIGFy
ZSBjcmVhdGluZyBhIGJ1bmNoIG9mIHRocmVhZHMgdGhhdCB0b3VjaCB0aGUgbWFpbiB0aHJlYWQn
cyBzdGFjay4gVGhpcyB3aWxsIG1ha2UgQVNBTiB1bmhhcHB5LgotLy8gVGhlIHJlYXNvbiB0aGlz
IGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3Qg
Y29udGludWUgdW50aWwgYWxsIHRocmVhZHMKLS8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNr
IGFyZSBkb25lIGV4ZWN1dGluZy4KLVNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUo
KQogewotICAgIGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShyZWNvbXBpbGVNb2RlKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOwor
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAg
VHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJs
eUNvbXBpbGVFbmQpOwogCi0gICAgaWYgKHJlY29tcGlsZU1vZGUpCi0gICAgICAgIEFTU0VSVCht
X21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpID09IHJlY29tcGlsZU1vZGUpOwotCiAg
ICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3Iu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2Nh
dGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1i
ZXIoc2l6ZSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgZmFpbCho
b2xkTG9jayhtX2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDEzMSArMTc4
LDE1MyBAQCB2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGls
ZU1vZGUpCiAgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlv
bikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlv
bkluZGV4ID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAi
LCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0
LT5maWVsZCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9y
dCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgaW1wb3J0LT5t
b2R1bGUsICI6ICIsIGltcG9ydC0+ZmllbGQpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5hdChpbXBvcnQtPmtpbmRJbmRleCk7Ci0gICAgICAgIG1fd2FzbUV4aXRTdHVicy51
bmNoZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IobV92bSwgbV9jYWxsTGlua0luZm9zLCBz
aWduYXR1cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBtX3dhc21FeGl0
U3R1YnMudW5jaGVja2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKCZtX3ZtLCBtX2NhbGxMaW5r
SW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CiAgICAgfQogCi0g
ICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7
Cit9CiAKLSAgICBhdXRvIGRvV29yayA9IFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6
ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZnVuY3Rp
b25JbmRleCA9IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgICsrbV9jdXJyZW50SW5k
ZXg7Ci0gICAgICAgICAgICB9CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBob3JlIGNsYXNzLi4u
IGFuZCB0aGlzIGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xhc3MgUGxhbjo6VGhy
ZWFkQ291bnRIb2xkZXIgeworcHVibGljOgorICAgIFRocmVhZENvdW50SG9sZGVyKFBsYW4mIHBs
YW4pCisgICAgICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJl
YWRzKys7CisgICAgfQogCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKLSAgICAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVu
Z3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0
dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9k
dWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKLQotICAgICAg
ICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3Jt
YXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMp
OwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBN
dWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmls
eSBjaG9vc2UgdGhlIGZpcnN0LgotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9u
IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklYTUUgbWFr
ZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICB+
VGhyZWFkQ291bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9w
bGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwog
Ci0gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJtaW5hdGUgb24gdGhlIG5leHQgZXhlY3V0
aW9uLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
aWYgKCFtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICBtX3BsYW4u
Y29tcGxldGUobG9ja2VyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsK
LSAgICAgICAgfQotICAgIH07CisgICAgUGxhbiYgbV9wbGFuOworfTsKIAotICAgIE1vbm90b25p
Y1RpbWUgc3RhcnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBp
bGVUaW1lcygpKQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK3Zv
aWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucygpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3Rh
dGU6OlByZXBhcmVkKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGls
YXRpb24iKTsKIAotICAgIHVpbnQzMl90IHRocmVhZENvdW50ID0gT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgOiAxOwotICAgIHVpbnQz
Ml90IG51bVdvcmtlclRocmVhZHMgPSB0aHJlYWRDb3VudCAtIDE7Ci0gICAgVmVjdG9yPFRocmVh
ZElkZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtV29y
a2VyVGhyZWFkcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVh
ZHM7IGkrKykKLSAgICAgICAgdGhyZWFkcy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlVGhyZWFkKCJq
c2Mud2FzbS1iMy1jb21waWxhdGlvbi50aHJlYWQiLCBkb1dvcmspKTsKKyAgICBpZiAobV9zdGF0
ZSA+PSBTdGF0ZTo6Q29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBUaHJlYWRDb3VudEhv
bGRlciBob2xkZXIoKnRoaXMpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgKytt
X2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUo
U3RhdGU6OkNvbXBpbGVkKTsKKyAgICAgICAgfQogCi0gICAgZG9Xb3JrKCk7IC8vIExldCB0aGUg
bWFpbiB0aHJlYWQgZG8gc29tZSB3b3JrIHRvby4KKyAgICAgICAgY29uc3QgdWludDhfdCogZnVu
Y3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rp
b25JbmRleF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25M
ZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUo
KSArIGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIEFT
U0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRp
Y2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOworCisgICAgICAgIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4oKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBp
bGUobV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
W2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJ
bmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgbV9tb2RlKTsKKworICAgICAgICBpZiAo
VU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2Up
IHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVs
dGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAg
ICAgIGZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigp
LCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4
KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9
CiAKLSAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAg
ICAgICAgewotICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21w
aWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWdu
YXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0
dXJlSW5kZXgpLT50b1N0cmluZygpOwordm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFj
dExvY2tlciYpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1f
Y3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmICht
X3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklU
LCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5j
dGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAg
IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlw
dGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9u
SW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92
bSwgKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwg
RnVuY3Rpb25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21F
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KG1fdm0sICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9p
bnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CiAKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAg
ICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlw
b2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8
QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+
V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVE
ZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50
Qnlwcm9kdWN0cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KIAotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1l
cygpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkg
LSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxl
IGFuZCBsaW5rIHRoZSBtb2R1bGUiKTsKLSAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNo
IHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAo
YXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxl
QWRkcmVzczsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVk
RnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4g
QjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNo
b3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFk
ZHJlc3MgPSBjYWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRv
SnMKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAg
ICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1f
bW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoY2FsbC5mdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBp
bXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGlu
ZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJF
TEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
NDYyCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQg
PT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAg
ICAgID8gbV93YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkKICAgICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0
U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
Y2FsbC50YXJnZXQgIT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25z
LmF0KGNhbGwuZnVuY3Rpb25JbmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50
cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0
ICE9IFVubGlua2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAg
ICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2Fs
bC5mdW5jdGlvbkluZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9mYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBT
dGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQp
OworICAgICAgICBtX2NvbXBsZXRpb25UYXNrKCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQu
bm90aWZ5QWxsKCk7CisgICAgfQogfQogCi12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwg
SlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2
b2lkIFBsYW46OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVu
Y3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQot
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9u
LT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50
Q2FsbGVlKTsKLQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdU
Rk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVu
dHJ5cG9pbnRDYWxsZWUpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYg
KG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhhdmUgYSB3YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRo
ZSBsb2NrIHRvIGNvbXBsZXRlIC8gZmFpbC4KKyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xv
Y2spOworICAgIH0KK30KIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgs
IGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpj
YW5jZWwoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3Rh
dGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBl
cnJvciBtZXNzYWdlIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAg
ICAgfQogfQogCisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5
MDkzZWY2YmE4MTg0ZTQ1YzRmZTAwNzY2MmY0Li45ZGIxNGVhNjk1OWE1NzYyYThjMzljODNmMjdk
YmY4OTVjMjM0YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEg
KzQwLDk2IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNl
RGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFu
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZv
aWQgZG9udEZpbmFsaXplKFBsYW4mKSB7IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9p
ZChQbGFuJik+IENvbXBsZXRpb25UYXNrOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7
IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sg
c2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3
aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihW
TSYsIFZlY3Rvcjx1aW50OF90PiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsK
IAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9k
ZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgp
OworICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9p
ZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4p
OwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4g
bV9mYWlsZWQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vy
cm9yTWVzc2FnZTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBv
cnQ+JiBleHBvcnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWls
ZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsK
ICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAg
ICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnMuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhh
c1dvcmsoKSk7CisgICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXpl
KCk7CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRh
a2VNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFp
bGVkKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7
CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAog
ICAgIEJhZzxDYWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZh
aWxlZCgpICYmICFoYXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5r
SW5mb3MpOwogICAgIH0KIAogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhp
dFN0dWJzKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0
dXJuIFdURk1vdmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9
CisgICAgdm9pZCBzZXRNb2RlQW5kUHJvbWlzZShNZW1vcnlNb2RlIG1vZGUsIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlKQorICAgIHsKKyAgICAgICAgbV9tb2RlID0gbW9kZTsKKyAgICAgICAg
bV9wZW5kaW5nUHJvbWlzZSA9IHByb21pc2U7CisgICAgfQorICAgIE1lbW9yeU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpTUHJvbWlzZURlZmVycmVkKiBwZW5kaW5n
UHJvbWlzZSgpIHsgcmV0dXJuIG1fcGVuZGluZ1Byb21pc2U7IH0KKyAgICBWTSYgdm0oKSBjb25z
dCB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7Cisg
ICAgICAgIEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQsCisg
ICAgICAgIENvbXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92
ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKworICAg
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3Nh
Z2U7IH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0
dXJuICFlcnJvck1lc3NhZ2UoKS5pc051bGwoKTsgfQorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhhc0JlZW5Q
cmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9CisK
KyAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJp
dmF0ZToKKyAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhy
ZWFkQ291bnRIb2xkZXI7CisKKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jik7CisKKyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAgICB2b2lkIGZhaWwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworCisgICAgY29uc3QgY2hh
ciogc3RhdGVTdHJpbmcoU3RhdGUpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9y
bWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1
cmVJbmRleD4gbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
czsKQEAgLTEwMywxNiArMTM4LDI0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAg
IFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAg
IFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3BlbmRp
bmdQcm9taXNlIHsgbnVsbHB0ciB9OworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRh
c2s7CisKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNv
bnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9Owog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsK
KyAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAg
ICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6SW5pdGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29y
azsKKyAgICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQz
Ml90IG1fY3VycmVudEluZGV4IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFk
YzYzMmVhOTIzNTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5o
IgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVD
YWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkp
OworICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxG
dW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFs
RnVuY3Rpb25JbmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24g
PSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwor
CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2Vi
QXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVu
dHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0
aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKwor
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2Vi
QXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlw
b2ludCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24t
Pndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAg
ICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2Fz
bUVudHJ5cG9pbnRDYWxsZWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IDc1ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMz
NzRmY2FlNjU0NjEyMTQuLjkyMzg1OTRiYTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMjcx
LDcgKzI3MSw3IEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBl
JiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByCiAgICAgICAgIGlmICh0YXJnZXQu
c2lnbmF0dXJlKCkgPT0gVm9pZCkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiYnJhbmNo
IHRvIGJsb2NrIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCB0YXJnZXQudHlwZSgpID09
IEJsb2NrVHlwZTo6VG9wTGV2ZWwgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNo
IHRvIGJsb2NrIiwgIiBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwg
dGFyZ2V0LnNpZ25hdHVyZSgpKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJn
ZXQuc2lnbmF0dXJlKCkgIT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNr
IHR5cGUgZG9lc24ndCBtYXRjaCBibG9jaydzIHR5cGUiKTsKIAogICAgICAgICByZXR1cm4geyB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDcwN2JkMGJjYjMwMTJmNWIwM2FiZDlkMmJhZmViZjQ0ZTVjODNlMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAs
MCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworI2luY2x1ZGUgPHd0
Zi9OdW1iZXJPZkNvcmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgY2hhciogV29ya2xp
c3Q6OnByaW9yaXR5U3RyaW5nKFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJp
b3JpdHkpIHsKKyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlvbjogcmV0dXJuICJQcmVwYXJh
dGlvbiI7CisgICAgY2FzZSBQcmlvcml0eTo6U2h1dGRvd246IHJldHVybiAiU2h1dGRvd24iOwor
ICAgIGNhc2UgUHJpb3JpdHk6OkNvbXBpbGF0aW9uOiByZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAg
ICBjYXNlIFByaW9yaXR5OjpTeW5jaHJvbm91czogcmV0dXJuICJTeW5jaHJvbm91cyI7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0
OjpUaHJlYWQgZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gQXV0b21hdGljVGhyZWFkOworICAgIFRocmVhZChjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29yaykKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgd29y
ay5tX2xvY2ssIHdvcmsubV9wbGFuRW5xdWV1ZWQpCisgICAgICAgICwgd29ya2xpc3Qod29yaykK
KyAgICB7CisKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNv
bXBpbGF0aW9uUGxhbihjb25zdCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBhdXRv
JiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0g
ZWxlbWVudC5wbGFuKQorICAgICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgUG9s
bFJlc3VsdCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisgICAgICAgIHN5bmNo
cm9uaXplLm5vdGlmeUFsbCgpOworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgewor
CisgICAgICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5Owor
ICAgICAgICAgICAgaWYgKHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24p
CisgICAgICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAg
IGVsZW1lbnQgPSBxdWV1ZS50b3AoKTsKKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBz
aG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxh
bi0+aGFzQmVlblByZXBhcmVkKCkpCisgICAgICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAg
ICAgICAgICAgIGlmIChlbGVtZW50LnBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBh
IGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2Vl
IGlmIHRoZXJlIGFyZSBvdGhlciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNv
bXBpbGF0aW9uUGxhbihsb2NrZXIpOworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVu
dCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0K
KworICAgIFdvcmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNv
bXBsZXRlID0gWyZdICgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsK
KyAgICAgICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBQbGFuKiBwbGFuID0gZWxlbWVudC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQo
cGxhbik7CisgICAgICAgIGlmICghcGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAg
ICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxh
bi0+aGFzV29yaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBwbGFuLT5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0
UHJpb3JpdHkoKTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsK
KyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBz
b21lIG9jY2FzaW9uYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5
IGUuZy4gc3luY2hyb25vdXMsIHBsYW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBs
YW4tPmNvbXBpbGVGdW5jdGlvbnMoKTsKKyAgICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkp
OworICAgICAgICBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmts
aXN0Lm1fbG9jaykpOworICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1Ymxp
YzoKKyAgICBDb25kaXRpb24gc3luY2hyb25pemU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0Owor
ICAgIC8vIFdlIGNhbiBvbmx5IG1vZGlmeSBlbGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4g
QSBzeW5jaHJvbm91cyBjb21waWxlIG1pZ2h0IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBp
biBvcmRlciB0byBib29zdCB0aGUgcHJpb3JpdHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7
Cit9OworCit2b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7Cisg
ICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgor
ICAgICAgICBwcmlvcml0eSA9IFByaW9yaXR5OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK2VudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFr
LCBEcm9wQW5kQ29udGludWUsIENvbnRpbnVlIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYgZnVuYykKK3sKKyAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhh
dmUgYW4gaXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3Ms
IHRoaXMgZnVuY3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5k
IHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZl
IG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1CisgICAgc3RkOjp2ZWN0b3I8
UXVldWVFbGVtZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgewor
ICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgIG1f
cXVldWUucG9wKCk7CisgICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50
KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykg
eworICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6
OkNvbnRpbnVlKQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAg
ICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVt
ZW50cykKKyAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworfQorCit2b2lkIFdvcmtsaXN0
OjplbnF1ZXVlKFJlZjxQbGFuPiBwbGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgaXRlcmF0ZShsb2Nr
ZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC5wbGFuLmdldCgpICE9ICZwbGFuLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVy
YXRlUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gSWYgd2Ug
ZG9uJ3QgaGF2ZSBhIHByb21pc2UgaXQgbXVzdCBiZSBzeW5jaHJvbm91cyBzbyB3ZSBzaG91bGQg
Ym9vc3QgdGhlIHByaW9yaXR5LgorICAgIFByaW9yaXR5IHByaW9yaXR5ID0gcGxhbi0+cGVuZGlu
Z1Byb21pc2UoKSA/IFByaW9yaXR5OjpQcmVwYXJhdGlvbiA6IFByaW9yaXR5OjpTeW5jaHJvbm91
czsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRW5xdWV1aW5nIHBsYW4gd2l0aCBwcmlvcml0
eTogIiwgcHJpb3JpdHlTdHJpbmcocHJpb3JpdHkpKTsKKyAgICBtX3F1ZXVlLnB1c2goeyBwcmlv
cml0eSwgbmV4dFRpY2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKKyAgICBtX3BsYW5FbnF1ZXVl
ZC0+bm90aWZ5T25lKGxvY2tlcik7Cit9CisKK3ZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5
bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOworICAgICAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhh
dmUgYW4gaXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3Ms
IHRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVu
IGFuZCB0aGUgcXVldWUgc2hvdWxkIGJlIHNtYWxsLgorICAgICAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIGhhdmUgb3VyIG93biBQcmlvcml0eVF1ZXVlIHRoYXQgZG9lc24ndCBzdWNrLgorICAgICAg
ICBzdGQ6OnZlY3Rvcjxjb25zdCBRdWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOworICAgICAgICBpdGVy
YXRlKGxvY2tlciwgWyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlm
IChlbGVtZW50LnBsYW4gPT0gJnBsYW4pIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnByaW9y
aXR5ID0gUHJpb3JpdHk6OlN5bmNocm9ub3VzOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVy
YXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRlUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9y
IChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykKKyAgICAgICAgICAgIG1fcXVldWUucHVzaChlbGVt
ZW50KTsKKworICAgICAgICBmb3IgKGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgeworICAgICAg
ICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuID09ICZwbGFuKQorICAgICAgICAgICAgICAg
IHRocmVhZC0+ZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJvbm91czsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHBsYW4ud2FpdEZvckNvbXBsZXRpb24oKTsKK30KKwordm9pZCBX
b3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOworICAgIC8vIHN0ZDo6cHJpb3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBh
biBpdGVyYXRvci4uLiA6KCBXaGlsZSB0aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0aW9uCisgICAg
Ly8gc2hvdWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUgc2hvdWxkIGJl
IHNtYWxsLgorICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9yaXR5UXVl
dWUgdGhhdCBkb2Vzbid0IHN1Y2suCisgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVt
ZW50JiBlbGVtZW50KSB7CisgICAgICAgIGlmICgmZWxlbWVudC5wbGFuLT52bSgpID09ICZ2bSkg
eworICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKKyAgICAgICAgICAgIHJldHVy
biBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgZm9yIChhdXRvJiB0
aHJlYWQgOiBtX3RocmVhZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuICYm
ICZ0aHJlYWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAgICAgICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0aHJl
YWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBob2xkIHRo
ZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnBsYW4tPmNhbmNl
bCgpOworICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KCptX2xvY2spOworICAg
ICAgICB9CisgICAgfQorfQorCitXb3JrbGlzdDo6V29ya2xpc3QoKQorICAgIDogbV9sb2NrKEJv
eDxMb2NrPjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNUaHJlYWRD
b25kaXRpb246OmNyZWF0ZSgpKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcGlsYXRpb25U
aHJlYWRzID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nl
c3NvckNvcmVzKCkgOiAxOworICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZD
b21waWxhdGlvblRocmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkczsgaSsr
KQorICAgICAgICBtX3RocmVhZHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8V29y
a2xpc3Q6OlRocmVhZD4obG9ja2VyLCAqdGhpcykpOworfQorCitXb3JrbGlzdDo6fldvcmtsaXN0
KCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAg
ICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0
ciB9KTsKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3RocmVhZHNbaV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdvcmtsaXN0KiBnbG9iYWxX
b3JrbGlzdDsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKSB7IHJldHVybiBn
bG9iYWxXb3JrbGlzdDsgfQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAgIHN0ZDo6Y2FsbF9vbmNl
KGluaXRpYWxpemVXb3JrbGlzdCwgW10geworICAgICAgICBnbG9iYWxXb3JrbGlzdCA9IG5ldyBX
b3JrbGlzdCgpOworICAgIH0pOworICAgIHJldHVybiAqZ2xvYmFsV29ya2xpc3Q7Cit9CisKKwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zOWMwNzM1YmMyYTE2ZmMyMzZmODE1NzBmMjhlODU5YTVjY2NlNDUwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIlZNLmgi
CisKKyNpbmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1By
b21pc2VEZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOworCitjbGFz
cyBXb3JrbGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
V29ya2xpc3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZW5xdWV1ZShSZWY8UGxhbj4pOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yVk0oVk0mKTsK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25vdXNseShQ
bGFuJik7CisKKyAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4q
KTsKKyAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qKTsKKwor
cHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKKwor
ICAgIHR5cGVkZWYgdWludDY0X3QgVGlja2V0OworICAgIFRpY2tldCBuZXh0VGlja2V0KCkgeyBy
ZXR1cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBlbnVtIGNsYXNzIFByaW9yaXR5
IHsKKyAgICAgICAgU2h1dGRvd24sCisgICAgICAgIFN5bmNocm9ub3VzLAorICAgICAgICBDb21w
aWxhdGlvbiwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworICAgIGNvbnN0IGNoYXIqIHBy
aW9yaXR5U3RyaW5nKFByaW9yaXR5KTsKKworICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQgeworICAg
ICAgICBQcmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRpY2tldDsKKyAgICAgICAg
UmVmUHRyPFBsYW4+IHBsYW47CisKKyAgICAgICAgdm9pZCBuZXh0UHJpb3JpdHkoKTsKKyAgICB9
OworCisgICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBib29sIG9wZXJhdG9yKCkoY29u
c3QgUXVldWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5wcmlvcml0
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC50aWNrZXQgPiByaWdodC50aWNrZXQ7Cisg
ICAgICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5OworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBp
dGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOworCisgICAgQm94
PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3Bs
YW5FbnF1ZXVlZDsKKyAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxvdyBidXQg
dGhhdCdzIHVubGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBpbGUgdGhp
bmdzIG9mIHRoZSBzYW1lCisgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVyLCB3aGlj
aCBpc24ndCB3cm9uZywganVzdCBzdWJvcHRpbWFsLgorICAgIFRpY2tldCBtX2xhc3RHcmFudGVk
VGlja2V0IHsgMCB9OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpWZWN0b3Ig
YnV0IFdURjo6VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVyYXRvci4K
KyAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8UXVldWVF
bGVtZW50PiwgQ29tcGFyYXRvcj4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVy
cmVkKiwgUGxhbio+IG1fYWN0aXZlUGxhbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxU
aHJlYWQ+PiBtX3RocmVhZHM7Cit9OworCitXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdE9yTnVs
bCgpOworSlNfRVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCk7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2Fs
bGVlLmgKaW5kZXggYjg3NzdkYTBkNGQ3YTEzMGY0MjI0ZWQ0NWZjY2MyZDE5YzFmMjdjNi4uYThh
M2RjYTNkMDlmNWRkMzlkYTZiOWE4Zjk5NWRjODUwODk4N2FjNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaApAQCAtNjAsOCAr
NjAsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdp
c3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIAog
cHJpdmF0ZToKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlwb2ludCYm
KTsKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwogCiAgICAgV2FzbTo6RW50cnlw
b2ludCBtX2VudHJ5cG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmZjg3MTE2ODE5YTMy
MjQzOWU4MWNiZDA0NjQ3MmEyNmYyMTgzZDhiLi5lYjk2MDczYjY5OThiMDJhMjA3NGFiMTVkZjc3
NDY3NjJkNmZiNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMjksMzEgKzI5LDY3IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFu
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0
ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9OwogCi1K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZv
cywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2FzbTo6TWVt
b3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBv
d25lciwgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxhbiwgdW5z
aWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9j
a1N0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5r
SW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCisg
ICAgLCBtX3BsYW4oV1RGTW92ZShwbGFuKSkKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9j
YWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG93
bmVyKTsKKyAgICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxvY2sobW9kZSkpOworICAgIG1vZHVs
ZSgpLT5tX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlz
LCB0aGlzKTsKKwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCit2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpbml0aWFsaXpl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBwbGFuKCkudm0oKTsKKyAgICBB
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXBsYW4oKS5oYXNXb3JrKCkpOworCisgICAgaWYgKHBsYW4oKS5mYWlsZWQoKSkgewor
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBsYW4oKS5lcnJvck1lc3NhZ2UoKTsKKyAgICAgICAg
bV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUKHBsYW4oKS5tb2RlKCkgPT0gbW9kZSgpKTsKKyAgICBBU1NFUlQocGxhbigpLmludGVy
bmFsRnVuY3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworCisgICAgbV9jYWxsTGlua0lu
Zm9zID0gcGxhbigpLnRha2VDYWxsTGlua0luZm9zKCk7CisgICAgbV93YXNtRXhpdFN0dWJzID0g
cGxhbigpLnRha2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuKCkuaW5pdGlhbGl6ZUNhbGxl
ZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkg
eworICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5
cG9pbnRDYWxsZWUpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVl
SW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9KTsKKworICAgIG1fcGxhbiA9IG51
bGxwdHI7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwp
LT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwogfQog
Ci1ib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIG1lbW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4o
SlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAgIGlmICghcnVubmFibGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2FzbTo6TWVtb3J5TW9kZSBjb2RlTW9k
ZSA9IG1vZGUoKTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUgPSBtZW1vcnktPm1l
bW9yeSgpLm1vZGUoKTsKICAgICBzd2l0Y2ggKGNvZGVNb2RlKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAppbmRleCBmMDMz
MTBlYTVlMjA2MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li41NzhhNjlmNDk4MTVhODI1MjNj
MTEyOTQ4ZmJkOGVhMDkwMzVmMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTczLDYgKzczLDIyIEBAIEFMV0FZ
U19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVmZmVyVmlldyA/IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQogCitBTFdBWVNfSU5MSU5F
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBieXRlT2Zmc2V0OworICAgIHNp
emVfdCBieXRlU2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVm
ZmVyOjp0cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBpZiAoYnVm
ZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9u
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiomIHdhc21GdW5j
dGlvbiwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNtV3JhcHBlckZ1bmN0aW9uKQog
ewogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjppbmZv
KCkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcAppbmRleCAxYzExYjBjYTY1YzkxNzQyZjhlNDgxM2MyNGQ5NzVm
NjVlZWJhYTE4Li41YmM5ODA5MWIwZWQwMDY5Yjg0ODY3ZWEyNmEyMmZlYmM4OTk1ZTFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHAKQEAgLTMyLDMxICszMiwxNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeShW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQotewot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBXZSBjcmVh
dGUgc3R1YiBtZW1vcmllcyBldmVuIGZvciBtb2R1bGVzIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkg
Z2V0IGEgbWVtb3J5IHNvIHdlIHdhbnQgdG8gYXZvaWQgcmVjb21wbGluZyB0aGVyZS4KLSAgICBp
ZiAobWVtb3J5LT5tZW1vcnkoKSkgewotICAgICAgICBhdXRvIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrLT5tb2R1bGUoKS0+Y29kZUJsb2NrKHZtLCBleGVjLCBtZW1vcnkpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCk7Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhp
cywgY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkp
OwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKLXsK
LSAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNob3Vs
ZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9jYXRp
b25TaXplKG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgc3RydWN0dXJlLCBt
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
LnNpemUoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBtb2R1bGUsIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQorY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFu
Y2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSkgfTsKIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogewpAQCAtNzUsMTEgKzYwLDExIEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIAorICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKICAgICBjb25zdCBz
aXplX3QgZXh0cmFNZW1vcnlTaXplID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2Jh
bHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8
dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBoZWFwKCktPnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKLSAgICBtX2NvZGVCbG9jay5z
ZXQodm0sIHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1fbW9kdWxlTmFtZXNwYWNl
T2JqZWN0LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBwdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtb2R1bGVOYW1l
c3BhY2VPYmplY3QsIE5vbmUpOwogfQpAQCAtOTUsMTYgKzgwLDI3NyBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOwogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwog
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1vZHVsZSgp
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoKnRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworfQor
Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2soVk0m
IHZtLCBSZWY8V2FzbTo6UGxhbj4gcGxhbikKK3sKKyAgICBhdXRvKiBjb2RlQmxvY2sgPSBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIG1vZHVsZSgpLCBtZW1vcnlNb2RlKCksIFdU
Rk1vdmUocGxhbiksIG1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmludGVybmFsRnVuY3Rp
b25Db3VudCgpKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Cisg
ICAgQVNTRVJUKCFjb2RlQmxvY2stPmluaXRpYWxpemVkKCkpOworfQorCit2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgY29kZUJs
b2NrKCktPmluaXRpYWxpemUoKTsKKworICAgIGlmICghY29kZUJsb2NrKCktPnJ1bm5hYmxlKCkp
IHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5r
RXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vy
cm9yU3RydWN0dXJlKCksIGNvZGVCbG9jaygpLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jaygpLT5pc1NhZmVUb1J1
bihtZW1vcnkoKSkpOworCisgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29yZCgp
KTsKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBKU1ZhbHVlIHN0YXJ0UmVz
dWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
cnRSZXN1bHQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Cit9CisK
K0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQoreworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKworICAgIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpOworCisgICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBl
cnJvcikgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICAvLyBJZiB0aGUgbGlzdCBv
ZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBu
b3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisgICAgaWYgKG1vZHVsZUluZm9ybWF0
aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY2FuJ3QgbWFrZSBXZWJB
c3NlbWJseS5JbnN0YW5jZSBiZWNhdXNlIHRoZXJlIGlzIG5vIGltcG9ydHMgT2JqZWN0IGFuZCB0
aGUgV2ViQXNzZW1ibHkuTW9kdWxlIHJlcXVpcmVzIGltcG9ydHMiKSkpOworCisgICAgSWRlbnRp
ZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVO
YW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CisgICAgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpj
cmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1
Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiBtb2R1bGVOYW1lc3BhY2UgPSBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShl
eGVjKTsKKyAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdl
IHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBK
U1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpOworICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5k
IHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBv
YmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUg
b2JqZWN0cywgcmVzcGVjdGl2ZWx5LgorICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGluaXRpYWxs
eS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KKyAgICB1bnNpZ25lZCBudW1JbXBvcnRG
dW5jdGlvbnMgPSAwOworICAgIHVuc2lnbmVkIG51bUltcG9ydEdsb2JhbHMgPSAwOworCisgICAg
Ym9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKKyAgICBib29sIGhhc1RhYmxlSW1wb3J0ID0g
ZmFsc2U7CisgICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CisgICAg
Zm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CisgICAgICAg
IC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1w
b3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KKyAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVW
YWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBpbXBvcnQubW9kdWxlKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7CisgICAgICAgIC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhy
b3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmplY3Qo
KSkKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKKworICAgICAg
ICAvLyAzLiBMZXQgdiBiZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25h
bWUpCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRN
b2R1bGVWYWx1ZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgaW1wb3J0LmZpZWxkKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgc3dpdGNoIChp
bXBvcnQua2luZCkgeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246
IHsKKyAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6CisgICAgICAg
ICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5
LkxpbmtFcnJvci4KKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIp
KSk7CisKKyAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+
KHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9u
IEV4b3RpYyBPYmplY3Q6CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVu
Y3Rpb247CisgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBw
ZXJGdW5jdGlvbjsKKyAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAg
ICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUg
c2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAg
ICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7CisgICAg
ICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0
ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhw
ZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaW1w
b3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9l
c24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUi
KSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6CisgICAg
ICAgICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBn
aXZlbiBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1
bWVudHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0
aGUgcmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCisg
ICAgICAgICAgICAvLyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KKyAg
ICAgICAgICAgIC8vIGl2LiBBcHBlbmQgdiB0byBmdW5jcy4KKyAgICAgICAgICAgIC8vIE5vdGU6
IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUg
cmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtl
cHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgorCisgICAgICAgICAgICBB
U1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOworICAgICAgICAg
ICAgaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9ucygpW251bUltcG9ydEZ1bmN0aW9ucysrXS5zZXQo
dm0sIGluc3RhbmNlLCBmdW5jdGlvbik7CisgICAgICAgICAgICAvLyB2LiBBcHBlbmQgY2xvc3Vy
ZSB0byBpbXBvcnRzLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFs
aWRhdGlvbiBmYWlsdXJlLgorICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFi
bGUgaW1wb3J0KToKKyAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlUYWJsZSo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdl
YkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisg
ICAgICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJs
ZSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKKwor
ICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7CisgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJ
bml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwg
ZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBv
cnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKworICAgICAg
ICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7CisgICAgICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVt
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScg
YnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRo
YW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCisgICAgICAgICAgICAvLyBp
aWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgaW5zdGFuY2Ut
Pm1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogeworICAg
ICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVl
ZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeSk7CisgICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQgPSB0
cnVlOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGku
IElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuTWVtb3J5IikpKTsKKworICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVk
SW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7CisgICAgICAgICAg
ICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlh
bCgpOworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2lu
aXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKworICAgICAgICAgICAgaWYgKFdhc206OlBh
Z2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11
bSgpKSB7CisgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBt
ZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1h
eGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRp
ZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRv
ZXMiKSkpOworCisgICAgICAgICAgICAgICAgaWYgKGFjdHVhbE1heGltdW0gPiBleHBlY3RlZE1h
eGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAn
bWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIp
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1v
cmllcy4KKyAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRz
LgorICAgICAgICAgICAgQVNTRVJUKCFpbnN0YW5jZS0+bV9tZW1vcnkpOworICAgICAgICAgICAg
aW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDogeworICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CisgICAgICAg
ICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBpbW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVF
cnJvci4KKyAgICAgICAgICAgIEFTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9y
dC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOworICAg
ICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9iYWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYp
IGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAg
ICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9
PSBXYXNtOjpJNjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2Jh
bCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUg
YSBudW1iZXIiKSkpOworICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZh
bHVlKHYpIHRvIGltcG9ydHMuCisgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9
PSBpbXBvcnQua2luZEluZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRp
b24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdh
c206OkkzMjoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEds
b2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0
R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50
b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9y
dEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9y
dCgpKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1w
b3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBvcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkp
OworICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBk
ZWZpbml0aW9uLgorICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2Fz
bTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCks
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgaWYgKCFt
ZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpKTsKKworICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwg
aW5zdGFuY2UsCisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJl
KCksIG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICB9CisgICAgfQorCisgICAgewor
ICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgeworICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZl
IHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJs
ZUltcG9ydCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50
YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7
CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZp
bml0aW9uLgorICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICBtb2R1bGVJbmZv
cm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFi
bGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5
cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQu
CisgICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91
bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICAgICAgQVNTRVJUKCF0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7CisgICAg
ICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3
YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWlu
ZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KKyAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNl
dCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJl
ZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisgICAgfQorICAgIAorICAgIC8vIEdsb2JhbHMK
KyAgICB7CisgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0
aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOworICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRl
eCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xv
YmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGds
b2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOworICAgICAgICAg
ICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0lt
cG9ydCk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNt
OjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZ2xv
YmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKKyAgICAg
ICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9h
ZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRl
eCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICB9CisgICAgfQor
CisgICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOworICAgIGluc3RhbmNlLT5tX2Nv
ZGVCbG9jay5zZXRNYXlCZU51bGwodm0sIGluc3RhbmNlLCBqc01vZHVsZS0+Y29kZUJsb2NrKGlu
c3RhbmNlLT5tZW1vcnlNb2RlKCkpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotY29u
c3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHkuSW5zdGFuY2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSkgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5k
ZXggZTIyODQ5Njk2NzIwNWEzMTM2Yzg4M2JiZGUzMjZhZGJjNzExMTMwZC4uZWM5YmM4ZTgxNDA3
MmI3ZWUyNWU5MmI5YjQ5ZTEwODQ2YWJmZDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTM4LDUxICszOCwz
NCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xh
c3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsK
K30KKworCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGli
bGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFz
ZTsKIAotCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7
CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRl
KiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVy
ZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5tb2R1bGUoKTsKLSAgICB9CisgICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2suZ2V0KCk7IH0KKyAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gY29k
ZUJsb2NrKCkgJiYgY29kZUJsb2NrKCktPmluaXRpYWxpemVkKCk7IH0KKyAgICB2b2lkIGFkZFVu
aXRpYWxpemVkQ29kZUJsb2NrKFZNJiwgUmVmPFdhc206OlBsYW4+KTsKKyAgICB2b2lkIGZpbmFs
aXplQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqKTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIGNvZGVCbG9jaygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sp
OwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAgfQorICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAK
LSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgp
Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9u
cyk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0RnVuY3Rpb25zKClbaWR4XTsKLSAgICB9Ci0KLSAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogdmFsdWUsIHVuc2ln
bmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIGltcG9ydEZ1bmN0aW9uKGlkeCktPnNldCh2bSwgdGhp
cywgdmFsdWUpOwotICAgIH0KKyAgICBKU09iamVjdCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQg
aWR4KSB7IFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9ucygpW2lkeF0uZ2V0KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgLy8gQ2FsbGluZyB0
aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBpbGUuCi0gICAgdm9pZCBzZXRNZW1vcnkoVk0mLCBF
eGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisgICAgdm9pZCBzZXRNZW1vcnkoVk0m
IHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9t
ZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9y
eU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpOyB9CiAKICAgICBKU1dl
YkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKSB7IG1fdGFibGUu
c2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KICAgICBpbnQ2NF90
IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgp
W2ldOyB9CkBAIC05MCwxMSArNzMsNiBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGxvYWRGNjRHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2
NEdsb2JhbChpKSk7IH0KICAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJp
dHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQogCi0gICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+
KSAqIGlkeDsKLSAgICB9Ci0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dl
YkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KQEAgLTExMyw2ICs5MSw5IEBAIHByb3Rl
Y3RlZDoKICAgICB9CiAKIHByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1w
b3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVj
dD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSk7IH0KKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsK
ICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCmluZGV4IGY0MTQ2N2Y0ZmFhZTlkYWEwODE2NzRlN2YyMDU3OGQ0YzVlYjZmM2Mu
LmEyY2QzNDYxMmE2YjllNGIyYzlkMjExZWZkODQwOWEwNDY4MDVkNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBA
IC00MiwzNSArNDIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUp
IH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6
Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRy
PFdhc206OlBsYW4+JiYgcGxhbikKIHsKKyAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIE9uIGZhaWx1
cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBpcyB0aHJvd24uCi0gICAgcGxhbi5y
dW4obW9kZSk7Ci0gICAgaWYgKHBsYW4uZmFpbGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0s
IHBsYW4uZXJyb3JNZXNzYWdlKCkpKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6
OmNyZWF0ZShleGVjLCB2bSwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlD
b21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChtb2RlKQotICAgICAgICBBU1NFUlQoKm1v
ZGUgPT0gcGxhbi5tb2RlKCkpOwotCi0gICAgdW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmlu
dGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgdGhpcywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBw
bGFuLnRha2VXYXNtRXhpdFN0dWJzKCksIHBsYW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7Ci0KLSAg
ICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
LAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
Q2FsbGVlKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICBjb2RlQmxv
Y2stPnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi1KU1dl
YkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50OF90KiBzb3VyY2UsIHNpemVf
dCBieXRlU2l6ZSkKLXsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxl
KHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVj
LCBzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byogbW9k
dWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2Up
KTsKKyAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICBy
ZXR1cm4gbW9kdWxlOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQpAQCAtNzgsNjEgKzYxLDQwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dl
YkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UpCiAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3NvdXJjZUJ1ZmZlcihzb3VyY2UucmVs
ZWFzZU5vbk51bGwoKSkKIHsKIH0KIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlID0gbWVtb3J5
LT5tZW1vcnkoKS5tb2RlKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6
TnVtYmVyT2ZNZW1vcnlNb2RlczsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja3NbaV0g
JiYgbV9jb2RlQmxvY2tzW2ldLT5pc1NhZmVUb1J1bihtZW1vcnkpKQotICAgICAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2Nrc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWNvZGVCbG9j
a0Zvcihtb2RlKSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQg
dG8gcmVjb21waWxlLi4uCi0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3NvdXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKTsKLQotICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBw
bGFuLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQot
ICAgIEFTU0VSVChwbGFuLmV4cG9ydHMoKS5zaXplKCkgPT0gbV9leHBvcnRTeW1ib2xUYWJsZS0+
c2l6ZSgpKTsKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKGF1dG8m
IGV4cCA6IHBsYW4uZXhwb3J0cygpKQotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChleHAsIG1f
ZXhwb3J0U3ltYm9sVGFibGUtPmNvbnRhaW5zKGV4cC5maWVsZC5pbXBsKCkpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxvY2stPm1vZGUoKSk7Ci0gICAgY29kZUJsb2NrRm9y
KG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwot
fQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxh
bj4mJiBwbGFuKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3Jt
YXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBmb3IgKGF1dG8mIGV4
cCA6IG1vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7CisgICAgICAgIEFTU0VSVChleHAuZmll
bGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAgICBleHAuZmllbGQgPSBB
dG9taWNTdHJpbmcoZXhwLmZpZWxkKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBpbXAgOiBtb2R1
bGVJbmZvcm1hdGlvbi0+aW1wb3J0cykgeworICAgICAgICBBU1NFUlQoaW1wLmZpZWxkLmlzU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAgaW1wLmZpZWxkID0gQXRvbWljU3Ry
aW5nKGltcC5maWVsZCk7CisgICAgICAgIEFTU0VSVChpbXAubW9kdWxlLmlzU2FmZVRvU2VuZFRv
QW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAgaW1wLm1vZHVsZSA9IEF0b21pY1N0cmluZyhpbXAu
bW9kdWxlKTsKKyAgICB9CiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2
bSwgZXhlYywgcGxhbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwpOworICAgIG1f
bW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKTsKIAogICAgIC8v
IE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQg
d2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgU3lt
Ym9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0g
ICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAgIGZvciAoYXV0byYgZXhw
IDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0cykgewogICAgICAgICBhdXRvIG9mZnNldCA9
IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2Fy
eSk7Ci0gICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBl
eHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Cisg
ICAgICAgIEFTU0VSVChleHAuZmllbGQuaW1wbCgpLT5pc0F0b21pYygpKTsKKyAgICAgICAgZXhw
b3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIHN0YXRpY19jYXN0PEF0b21p
Y1N0cmluZ0ltcGwqPihleHAuZmllbGQuaW1wbCgpKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZz
ZXQob2Zmc2V0KSkpOwogICAgIH0KIAotICAgIG1fc291cmNlQnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gcGxh
bi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBtX2V4cG9ydFN5bWJvbFRhYmxlLnNldCh2
bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUpOwotICAgIGNvZGVCbG9ja0Zvcihjb2RlQmxvY2st
Pm1vZGUoKSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCiB2b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDM4OWU2M2EzMzVjMWMx
MTdiNjk3Njk3MTBjNjNiZDdmODM0ZTg2ZTQuLmE0MTc4ODRkZDUxMTkzY2JkMGE2YzYyY2Q2Njkx
ZDMxOGY0YWUwZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTQ4LDM1ICs0OCwzMiBAQCBjbGFzcyBKU1dlYkFzc2Vt
Ymx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseU1vZHVsZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdWludDhfdCog
c291cmNlLCBzaXplX3QgYnl0ZVNpemUpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5QnVm
ZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAg
ICBERUNMQVJFX0lORk87CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KTsgfQotICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgcmV0
dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsgfQog
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhw
b3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAg
IH0KIAotICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMg
b3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8g
cmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0
dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpKS5nZXQo
KTsgfQotICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBn
aXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCi0gICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJs
eU1lbW9yeSopOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpN
ZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KG1vZGUpXS5nZXQoKTsgfQorCisgICAgQXJyYXlCdWZmZXImIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlQnVmZmVyLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVy
PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+JiBjb2RlQmxvY2tGb3IoV2FzbTo6TWVtb3J5TW9kZSBt
b2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV07IH0K
LSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYsIEV4ZWNTdGF0
ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUgPSBz
dGQ6Om51bGxvcHQpOworICAgIGZyaWVuZCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOwog
Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRl
U2l6ZSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxB
cnJheUJ1ZmZlcj4mJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxXYXNt
OjpQbGFuPiYmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOworICAgIFJlZjxBcnJheUJ1
ZmZlcj4gbV9zb3VyY2VCdWZmZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxT
eW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNd
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGFjMzE4MWIzZjlkY2Vl
NGUxMzNiMDg3ZmY3MWY0OTAxNWU0ODhkMmQuLjA0MWRkMzU4NDg0NzRhNWU4Zjg5N2RlNzdjYjRi
ZDc1MmM5ZmIyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzcsNiAr
MzcsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgor
I2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgpAQCAtNDUs
OCArNDcsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotCiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRh
YmxlV2ViQXNzZW1ibHlJbnN0YW5jZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IpIH07CiAKIC8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmx1dC5oCkBAIC01NCwyNjkgKzU0LDUyIEBAIGNvbnN0IENsYXNzSW5mbyBX
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJh
c2U6OnNfCiAgQGVuZAogICovCiAKK3VzaW5nIFdhc206OlBsYW47CisKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBX
ZWJBc3NlbWJseS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJs
eU1vZHVsZSo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFqc01vZHVsZSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0
byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgw
KSkpKSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxK
U1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1v
ZHVsZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1l
bnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1l
bnQoMCkpKSkpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90
IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVy
cm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1l
bnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9i
amVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0
T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29u
ZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBh
biBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGlt
cG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
c2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVk
IG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFs
dWUoaW1wb3J0QXJndW1lbnQpKSkpOwogICAgIAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKLQotICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShl
eGVjLCBqc01vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSkpOwotfQotCi1K
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVs
ZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkK
LXsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwotCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0KLSAg
ICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfTsKLQotICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5v
dCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9y
IGlzIHRocm93bi4KLSAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYg
IWltcG9ydE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1
c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUg
cmVxdWlyZXMgaW1wb3J0cyIpKSk7Ci0KLSAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50
aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2Vi
QXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxl
UmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1v
ZHVsZUluZm9ybWF0aW9uKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwotCi0KLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwg
bW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAvLyBMZXQgZnVuY3MsIG1lbW9y
aWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFT
Y3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5
LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KLSAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBp
bml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVt
SW1wb3J0RnVuY3Rpb25zID0gMDsKLSAgICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsK
LQotICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNUYWJsZUlt
cG9ydCA9IGZhbHNlOwotICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRz
OgotICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewot
ICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcg
R2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCi0gICAgICAgIEpTVmFsdWUgaW1wb3J0
TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAg
Ly8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAg
ICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVz
dCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOwotCi0gICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2
YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBpLml0ZW1fbmFtZSkKLSAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc3dp
dGNoIChpbXBvcnQua2luZCkgewotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVu
Y3Rpb246IHsKLSAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6Ci0g
ICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFz
c2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxs
YWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09i
amVjdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1
bmN0aW9uIEV4b3RpYyBPYmplY3Q6Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3
YXNtRnVuY3Rpb247Ci0gICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2Fz
bVdyYXBwZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0
aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewot
ICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRj
aCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAg
ICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7
Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
aW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCi0gICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24o
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1
cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWdu
YXR1cmUiKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6
Ci0gICAgICAgICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9m
IHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJs
eSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0
dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFs
dWUuCi0gICAgICAgICAgICAvLyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlv
bi4KLSAgICAgICAgICAgIC8vIGl2LiBBcHBlbmQgdiB0byBmdW5jcy4KLSAgICAgICAgICAgIC8v
IE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNs
b3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2ls
IGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgotCi0gICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9ydEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgbnVtSW1w
b3J0RnVuY3Rpb25zKyspOwotICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1w
b3J0cy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1Rh
YmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24g
ZmFpbHVyZS4KLSAgICAgICAgICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9y
dCk6Ci0gICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBKU1dl
YkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUq
Pih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJs
eS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAg
ICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0
IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7Ci0KLSAgICAgICAg
ICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24uaW5pdGlhbCgpOwotICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9
IHRhYmxlLT5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVk
SW5pdGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IHByb3Zp
ZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7Ci0KLSAgICAgICAgICAgIGlm
IChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1h
dGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOwotICAg
ICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUg
bW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCph
Y3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBt
b2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgotICAgICAgICAgICAgLy8gaWlpLiBBcHBl
bmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5zZXRUYWJs
ZSh2bSwgdGFibGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgLy8gNi4gSWYgaSBp
cyBhIG1lbW9yeSBpbXBvcnQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5
SW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFp
bHVyZS4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eSk7Ci0gICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVt
b3J5Kj4odm0sIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNz
ZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAg
ICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5
IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKLQot
ICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0
dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOwotICAgICAgICAgICAgaWYg
KGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNt
YWxsIikpKTsKLQotICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGlt
dW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7Ci0gICAgICAgICAgICAg
ICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGlt
dW0oKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVt
JyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGFjdHVhbE1heGltdW0gPiBleHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRo
YW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KLSAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVtb3J5KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7Ci0gICAgICAg
ICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9ydDoKLSAgICAgICAgICAgIC8vIGkuIElm
IGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAg
ICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0u
bXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7Ci0gICAgICAgICAgICAvLyBp
aS4gSWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUodikgaXMgbm90IE51bWJl
ciwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAobW9kdWxl
SW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBh
biBpNjQiKSkpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSk7
Ci0gICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1w
b3J0cy4KLSAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IGltcG9ydC5raW5k
SW5kZXgpOwotICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2lt
cG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAg
ICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1
ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1w
b3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0Ogot
ICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpIHsKLSAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hv
dWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGhhc01lbW9yeUltcG9ydCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7Ci0gICAgICAgICAg
ICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0g
ICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7Ci0gICAgICAgICAgICBpZiAo
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5KCkpCi0gICAgICAgICAg
ICAgICAgbWVtb3J5ID0ganNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9yeSgpOwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUo
dm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwg
ZXhlYywKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwg
bWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3Rh
bmNlU3RydWN0dXJlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAgIC8vIDEpIFRoZSBpbnN0
YW5jZSBhbHJlYWR5IGhhcyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2sgKHJ1bm5hYmxlKSwgc28g
d2UganVzdCBuZWVkIHRvIGZpbmFsaXplQ3JlYXRpb24uCisgICAgLy8gMikgVGhlIGluc3RhbmNl
IGhhcyBubyBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhl
IGNvZGUgZm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmlu
aXRpYWxpemVkIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgY29tcGlsYXRp
b24gdG8gZmluaXNoLgorCisgICAgaWYgKCFpbnN0YW5jZS0+aW5pdGlhbGl6ZWQoKSkgeworICAg
ICAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKQorICAgICAgICAgICAgV2FzbTo6ZW5zdXJl
V29ya2xpc3QoKS5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KGluc3RhbmNlLT5jb2RlQmxvY2so
KS0+cGxhbigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWY8V2FzbTo6UGxhbj4g
cGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbW9kdWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVs
bENvbXBpbGUsIFBsYW46OmRvbnRGaW5hbGl6ZSkpOworICAgICAgICAgICAgcGxhbi0+c2V0TW9k
ZUFuZFByb21pc2UoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsK
KworICAgICAgICAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOwor
ICAgICAgICAgICAgd29ya2xpc3QuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAg
ICB3b3JrbGlzdC5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4uZ2V0KCkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJs
ZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBv
cnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1w
b3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkg
ewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24uaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3
aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKLSAgICAg
ICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwg
bW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJs
eVRhYmxlIHdlJ3ZlIGRlZmluZWQuCi0gICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8g
YmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgot
ICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAg
IEFTU0VSVCh0YWJsZSk7IAotICAgICAgICAgICAgaW5zdGFuY2UtPnNldFRhYmxlKHZtLCB0YWJs
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgewot
ICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNt
IC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4g
dHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAgICBpbnN0YW5jZS0+c2V0TWVt
b3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYo
KihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOwotICAgIH0KLQotICAgIC8vIEdsb2JhbHMKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZp
cnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51
bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5z
aXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9
IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOwotICAgICAgICAgICAgQVNT
RVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7
Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9i
YWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmlu
aXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKLSAgICAgICAgICAg
ICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEds
b2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xv
YmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
bW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIG1v
ZHVsZVJlY29yZC0+ZHVtcCgpOwotICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNv
cmQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYyk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGluc3RhbmNlKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwCmluZGV4IDU5NzA5ZjUxNzU2ZGM1NWVhMmJkMjc4NjYzNTA1ZTllMzkzN2Yw
MTMuLjM1OTk2MjJmMmNhMjQ5YjFlMWQ4MTIwY2EzNjNhZDYxNGU1YTZlNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwCkBAIC03NSwxMyArNzUsMTMgQEAgSlNWYWx1ZSBXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJ1ZmYKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHNpemVfdCBieXRlT2Zmc2V0OwotICAgIHNpemVfdCBi
eXRlU2l6ZTsKLSAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVj
LCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIGV4ZWMsIHN0
cnVjdHVyZSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQdHI8V2FzbTo6
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCAqc291cmNlLCBXYXNtOjpQ
bGFuOjpWYWxpZGF0aW9uLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBpZiAoIXBs
YW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JT
dHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICByZXR1cm4gSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXVEZNb3ZlKHNvdXJj
ZSksIFdURk1vdmUocGxhbikpOwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAKaW5kZXggZmZmZWU1YzEwZjU5ZjgxZjFiYmUzY2YxZDU0NzdjZjkwYzY4N2Y3
MC4uZmI1NjFkOWRkYjg3ZTc0MDcyOWE2MjliNTE4NjE3MDU0OTE2YmExNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcApAQCAtNzMsOCArNzMsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFdhc20KIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9u
LmV4cG9ydHMpCi0gICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2Nh
bChleHAuZmllbGQsIGV4cC5maWVsZCkpOworICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9k
dWxlSW5mb3JtYXRpb24uZXhwb3J0cykgeworICAgICAgICBJZGVudGlmaWVyIGZpZWxkID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVsZCk7CisgICAgICAgIGFkZEV4cG9ydEVu
dHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChmaWVsZCwgZmllbGQpKTsKKyAgICB9CiB9CiAK
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTg1LDE0ICs4NywxMyBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zdGFydEZ1bmN0aW9u
KTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9k
dWxlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0g
aW5zdGFuY2UtPm1vZHVsZSgpOwogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAK
QEAgLTExMiw3ICsxMTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICAgICAg
Ly8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNs
b3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1
cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQg
dGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4g
dGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0
aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0
ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBmdW5jdGlvbkltcG9ydENvdW50
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IGV4cC5raW5kSW5k
ZXg7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2Ut
PmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBK
U09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rp
b25JbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24o
dm0sIGZ1bmN0aW9uSW1wb3J0KSkKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9
IGZ1bmN0aW9uSW1wb3J0OwogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTI4LDcgKzEyOSw3
IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhCiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAg
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0
dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAg
ICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgICAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxk
LnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENh
bGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0Vu
dHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzksNyArMTgwLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGEKICAgICAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBmYWxzZTsKICAg
ICAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IHRydWU7CiAgICAgICAgIGJvb2wgcHV0
UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0
KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBleHAuZmllbGQsIGV4cG9ydGVkVmFsdWUsIHNob3Vs
ZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgZXhwLmZpZWxkKSwgZXhwb3J0ZWRW
YWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25vcmVSZWFkT25seUVycm9ycywgcHV0
UmVzdWx0KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0KTsKICAgICB9CiAKQEAg
LTE5Miw3ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YQogICAgICAgICBBU1NFUlQo
IXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+
cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwogICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAg
ICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3Rh
cnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFy
dEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNw
YWNlKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVu
Y3Rpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKQEAgLTI1MSw3ICsy
NTIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1l
bnQuZnVuY3Rpb25JbmRpY2VzW2ldOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5k
ZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3Rh
bmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2lu
c3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlv
biA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9y
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVk
IHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgKaW5kZXggNWRjZWI0MmQ4ZjhjMjA2OTgyOTRiYWEwYzZiYmNm
NDliOGRjZDQzZC4uMmI4MzcyZTdjN2MzMzk0NzhlOWJlNzY1MTc3ZWI4NTI0MTZkNDdlOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5oCkBAIC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SlNXZWJBc3NlbWJseUluc3RhbmNlOworY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNz
IFdlYkFzc2VtYmx5RnVuY3Rpb247CiAKIC8vIEJhc2VkIG9uIHRoZSBXZWJBc3NlbWJseS5JbnN0
YW5jZSBzcGVjaWZpY2F0aW9uCkBAIC00Nyw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogICAgIHN0YXRpYyBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogY3JlYXRlKEV4ZWNTdGF0ZSos
IFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJik7CiAKLSAgICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKik7CisgICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUq
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9D
aGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0NWY5ZDlhYzFiMWZiYmNkNWNiOTFk
N2ZhZWJlNDg5ZWQwNWI0OGY4Li5mYzIyMzY2MzJkOGJkODU5NmVmMDQ2ZDNhMTcxZmQxNzg4MGFk
NzM4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAzLTI3ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlL2NvbXBpbGUgdHJ1bHkgYXN5bmNocm9ub3VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vYXNzZXJ0LmpzOgorICAgICAgICAq
IHdhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzOgorICAgICAgICAoYXN5bmMudGVzdFByb21p
c2VBUEkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1jb21waWxlLXBhcmFs
bGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRocm93RXhuKToKKyAgICAgICAgKGFzeW5j
LnRlc3QpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1w
YXJhbGxlbC5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKiB3YXNt
L2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanM6CisgICAgICAgIChhc3NlcnQuZXEu
YXN5bmMudGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAoYXNzZXJ0LmFzeW5j
VGVzdC5hc3luYy50ZXN0KToKKyAgICAgICAgKGFzc2VydC5hc3luY1Rlc3QpOgorICAgICAgICAo
YXNzZXJ0LnRydXRoeS5hc3luYy50ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKGFzc2VydC50cnV0
aHkpOiBEZWxldGVkLgorCiAyMDE3LTAzLTIzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBqc05vbnRyaXZpYWxTdHJpbmcgYWdyZXNz
aXZlbHkgZm9yIFRvU3RyaW5nKEludDUyKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Fzc2Vy
dC5qcyBiL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKaW5kZXggZDFhYTA4N2Q1ZjZjZjE4YTM0MWJk
YzcwNThhMmNiODdlOTU2YzdmYy4uMDg5YzZiNTZlZGVlY2E4NGE4ZjNkOTdkY2EyZGZlNjdhNmY2
NWQ3MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcworKysgYi9KU1Rlc3RzL3dh
c20vYXNzZXJ0LmpzCkBAIC0xNDAsMyArMTQwLDI0IEBAIGV4cG9ydCB7CiAgICAgX3Rocm93cyBh
cyB0aHJvd3MsCiAgICAgX2luc3RhbmNlb2YgYXMgaW5zdGFuY2VvZiwKIH07CisKK2NvbnN0IGFz
eW5jVGVzdEltcGwgPSAocHJvbWlzZSwgdGhlbkZ1bmMsIGNhdGNoRnVuYykgPT4geworICAgIGFz
eW5jVGVzdFN0YXJ0KDEpOworICAgIHByb21pc2UudGhlbih0aGVuRnVuYykuY2F0Y2goY2F0Y2hG
dW5jKTsKK307CisKK2NvbnN0IHByaW50RXhuID0gKGUpID0+IHsKKyAgICBwcmludCgiRmFpbGVk
OiAiLCBlKTsKKyAgICBwcmludChlLnN0YWNrKTsKK307CisKK2V4cG9ydCBjb25zdCBhc3luY1Rl
c3QgPSAocHJvbWlzZSkgPT4gYXN5bmNUZXN0SW1wbChwcm9taXNlLCBhc3luY1Rlc3RQYXNzZWQs
IHByaW50RXhuKTsKK2V4cG9ydCBjb25zdCBhc3luY1Rlc3RFcSA9IChwcm9taXNlLCBleHBlY3Rl
ZCkgPT4geworICAgIGNvbnN0IHRoZW5DaGVjayA9ICh2YWx1ZSkgPT4geworICAgICAgICBpZiAo
dmFsdWUgPT09IGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0dXJuIGFzeW5jVGVzdFBhc3NlZCgp
OworICAgICAgICBwcmludCgiRmFpbGVkOiBnb3QgIiwgdmFsdWUsICIgYnV0IGV4cGVjdGVkICIs
IGV4cGVjdGVkKTsKKworICAgIH0KKyAgICBhc3luY1Rlc3RJbXBsKHByb21pc2UsIHRoZW5DaGVj
aywgcHJpbnRFeG4pOworfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxl
LWNvbXBpbGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCmluZGV4
IGYzNDNjNmU5M2M3MzEyNWU0OWFkOTNmNGFhNzJhMWEwOWU2OWUyYmIuLjYzMjQzMDI3YmI5MjM2
NzBjY2M4M2MxNTU3NmRkY2E1ZDllYTZlNzMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1h
cGkvTW9kdWxlLWNvbXBpbGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29t
cGlsZS5qcwpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKLWxldCBkb25l
ID0gZmFsc2U7CiBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICB7CiAgICAg
ICAgIC8vIENhbid0IGRlY2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCkBAIC0xNCwzOSArMTMs
MzAgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICAuQ29k
ZSgpCiAgICAgICAgICAgICAuRW5kKCk7CiAKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAg
ICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAg
ICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2Yg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5t
ZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAv
IDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9y
eSAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2Vj
dGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOwogICAgICAgICB9
Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAg
bGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJB
c3NlbWJseS5jb21waWxlKCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhy
ZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVy
cm9yKTsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBt
dXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAn
V2ViQXNzZW1ibHkuY29tcGlsZSgpJykiKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1
dGh5KHRocmV3KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwog
ICAgICAgICB0cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgyMCk7
CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAg
ICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAg
IGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVm
ZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGls
ZSgyMCknKSIpOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAg
IH0KIAogICAgIHsKQEAgLTYxLDEwICs1MSw2IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNl
QVBJKCkgewogICAgICAgICBsZXQgbW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVs
ZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgfQotCi0gICAgZG9uZSA9IHRy
dWU7CiB9CiAKLXRlc3RQcm9taXNlQVBJKCk7Ci1kcmFpbk1pY3JvdGFza3MoKTsKLWFzc2VydC50
cnV0aHkoZG9uZSk7Cithc3NlcnQuYXN5bmNUZXN0KHRlc3RQcm9taXNlQVBJKCkpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5q
cyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTJmZWFlY2I5ZTg0MTcyODNlYzRhOWFhNzQ5ODJiOTRjYjQwOWQ2OAotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUt
cGFyYWxsZWwuanMKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworYXN5
bmMgZnVuY3Rpb24gdGhyb3dFeG4oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Fz
eW5jIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgY29uc3QgbG9vcERlcHRoID0gMTA7CisgICAgY29u
c3QgbnVtQ29tcGlsYXRpb25zID0gMTsKKyAgICBjb25zdCBudW1WYXJzID0gMzA7CisgICAgY29u
c3QgcGFyYW1zID0gW107CisgICAgcGFyYW1zLmxlbmd0aCA9IG51bVZhcnM7CisgICAgcGFyYW1z
LmZpbGwoImkzMiIpOworCisgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFy
YW1zLCByZXQ6ICJpMzIiIH0pOworCisgICAgY29uc3QgbWFrZUxvb3AgPSAoYnVpbGRlciwgZGVw
dGgpID0+IHsKKyAgICAgICAgaWYgKGRlcHRoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ1
aWxkZXI7CisKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgICAgIC5Mb29wKCJp
MzIiLCAoYikgPT4geworICAgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisg
ICAgICAgICAgICAgICAgICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0
TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAg
ICAgIC5CcklmKDEpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRo
IC0gMSkuQnIoMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIKKwor
ICAgIH0KKworICAgIGJ1aWxkZXIgPSBtYWtlTG9vcChidWlsZGVyLCBsb29wRGVwdGgpOworICAg
IGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29t
cGlsYXRpb25zLnB1c2goV2ViQXNzZW1ibHkuY29tcGlsZShiaW4pKTsKKyAgICB9CisKKyAgICBh
d2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRl
c3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0
YW50aWF0ZS1wYXJhbGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWlu
c3RhbnRpYXRlLXBhcmFsbGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NDdiY2FkMGI4ODgwNDc2YTc4M2Jk
ZGMxYTk0MWNlYTQyNjBkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsxLDc1IEBACitp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnOworCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0
IGxvb3BEZXB0aCA9IDEwMDsKKyAgICBjb25zdCBudW1Db21waWxhdGlvbnMgPSAxOworICAgIGNv
bnN0IG51bVZhcnMgPSAzMDsKKyAgICBjb25zdCBwYXJhbXMgPSBbXTsKKyAgICBwYXJhbXMubGVu
Z3RoID0gbnVtVmFyczsKKyAgICBwYXJhbXMuZmlsbCgiaTMyIik7CisKKyAgICBsZXQgYnVpbGRl
ciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBv
cnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHsgaW5pdGlhbDogMCB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXMsIHJldDogImkz
MiIgfSk7CisKKyAgICBjb25zdCBtYWtlTG9vcCA9IChidWlsZGVyLCBkZXB0aCkgPT4geworICAg
ICAgICBpZiAoZGVwdGggPT09IDApCisgICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKKworICAg
ICAgICBidWlsZGVyID0gYnVpbGRlcgorICAgICAgICAgICAgLkxvb3AoImkzMiIsIChiKSA9PiB7
CisgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAg
ICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOwor
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgfQorCisgICAgYnVp
bGRlciA9IG1ha2VMb29wKGJ1aWxkZXIsIGxvb3BEZXB0aCk7CisgICAgYnVpbGRlciA9IGJ1aWxk
ZXIuRW5kKCkuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRp
YWw6IDAgfSk7CisgICAgY29uc3QgaW1wb3J0T2JqZWN0ID0geyAiaW1wIjogeyAibWVtb3J5Ijog
bWVtb3J5IH0gfTsKKworICAgIC8vIENvbXBpbGUgYSBidW5jaCBvZiBpbnN0YW5jZXMgaW4gcGFy
YWxsZWwuCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2Vi
QXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBpbXBvcnRPYmplY3QpKTsKKyAgICB9CisKKyAgICBs
ZXQgW2luc3RdID0gYXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKyAgICBsZXQgbW9k
dWxlID0gaW5zdC5tb2R1bGU7CisKKyAgICAvLyBDb21waWxlIGEgYnVuY2ggb2YgaW5zdGFuY2Vz
IGZyb20gbW9kdWxlcyBpbiBwYXJhbGxlbC4KKyAgICBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IG51bUNvbXBpbGF0aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBp
bGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0
KSk7CisgICAgfQorCisgICAgYXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKworICAg
IC8vIENvbXBpbGUgYW4gaW5zdGFuY2UgZnJvbSBhIG1vZHVsZSBpbiBwYXJhbGxlbCwgaGF2ZSBz
eW5jIGNvbXBpbGF0aW9uIHN0ZWFsIGl0LgorICAgIGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGNv
bXBpbGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0KSk7CisgICAgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGltcG9y
dE9iamVjdCk7CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCith
c3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBp
L3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFz
c2VtYmx5LWluc3RhbnRpYXRlLmpzCmluZGV4IGE5M2JjNjA1ZmYxN2RkZWU4MDFmN2E3NTMzNDE4
NmE4NjFkNDQyYWQuLmZiNDg4N2EwN2M0ZTc5MWViMzU1MDg3NjU4OTg1OTg5MGViMjE2NGUgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCkBA
IC0xOSwxOCArMTksMTQgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0
aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAK
LSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAg
ICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZShiaW4pOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2Vt
Ymx5Lk1vZHVsZSk7CiAgICAgICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBX
ZWJBc3NlbWJseS5JbnN0YW5jZSk7CiAgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmZvbygyMCksIDEpOwotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7
Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBh
c3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTQ4LDE5ICs0NCwxNSBAQCBhc3Nl
cnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJp
biA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7
CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
IGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShi
aW4sIG51bGwpOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC5lcShl
Lm1lc3NhZ2UsICJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVz
dCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0
YW50aWF0ZShiaW4sIG51bGwpJykiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0
LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAg
LTc4LDIwICs3MCwxNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3Ro
LCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAot
ICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAg
ICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7
Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgdmFsaWRhdGU6IGNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBl
LCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50
aWF0ZShiaW4pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCB2YWxpZGF0ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1
bmV4cGVjdGVkIHR5cGUsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAiKTsKICAgICAgICAgfQotICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rh
c2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRl
c3QoKSk7CiB9CiAKIHsKQEAgLTExMCwxOSArOTgsMTUgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0
aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5z
dGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5
OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5t
ZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHku
TWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHtt
ZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1v
cnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAg
ICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAg
ZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQu
YXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTE0MSwyMCArMTI1LDE2IEBAIGFzc2VydC5l
cShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0g
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAg
ICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICAgICAgbGV0
IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVt
b3J5OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEo
ZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1i
bHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6
IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJN
ZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsK
ICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0g
ICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3Nl
cnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTE3MiwxOCArMTUyLDE0IEBAIGFzc2Vy
dC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsK
ICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KGluc3Rh
bmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwogICAgICAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAg
fQogCi0gICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0
aHkoZG9uZSk7CisgICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQogCiB7CkBAIC0yMDIs
NyArMTc4LDYgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7
CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBs
ZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CkBAIC0y
MTAsMTAgKzE4NSw3IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgLy8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCiAg
ICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBh
biBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2Vt
Ymx5Lmluc3RhbnRpYXRlKDI1KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7
CiAgICAgfQogCi0gICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2Vy
dC50cnV0aHkoZG9uZSk7CisgICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305524</attachid>
            <date>2017-03-27 16:31:56 -0700</date>
            <delta_ts>2017-03-28 08:31:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170327163151.patch</filename>
            <type>text/plain</type>
            <size>227324</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTkwMjI2OTY2MzhmYTVlMzlmZmQ3NDFjMGNjMzNjNTBjYzY3OTc5Li5iZWU4NTI1ZDdkZmQ0NzRj
NTA0MzBmZDZkZTA4MzNhNzRlZWIxNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0U3Rh
cnQpOgorICAgICAgICAoZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQpOgorICAgICAgICAoZnVuY3Rp
b25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VB
cmd1bWVudHMpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlz
ZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVy
cmVkOjpwcm9taXNlQXN5bmNQZW5kaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5jcHAuCisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6Cisg
ICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKToKKyAgICAgICAgKEpTQzo6
SlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9v
cFRpbWVyOjp0aW1lckRpZEZpcmUpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcik6
CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24pOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayk6CisgICAgICAgICogcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmguCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzdG9w
UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6OnJlamVj
dCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlND
OjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpj
b21waWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUluc3RhbnRp
YXRlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAg
ICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpwbGFuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6cnVubmFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjplcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxsZWVzKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAq
IHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11
bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpoYXNSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjp0
YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJ
bmZvcm1hdGlvbjo6bW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpNb2R1bGVQYXJzZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENv
dW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxp
emVDYWxsZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OmRvbnRGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmV4cG9ydHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbnRlcm5hbEZ1bmN0aW9u
Q291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlTW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlQ2FsbExpbmtJbmZvcyk6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnRha2VXYXNtRXhpdFN0dWJzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6c2V0TW9kZUFuZFByb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGVuZGluZ1Byb21pc2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVycm9y
TWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNC
ZWVuUHJlcGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW5JbmxpbmVzLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmguCisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNt
L1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnByaW9yaXR5U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9yaXR5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6Oml0ZXJhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21w
bGV0ZVBsYW5TeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0
b3BBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpl
bnN1cmVXb3JrbGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6V29ya2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVk
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBhZnRlciB3ZSBkbyBUTFMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODI2N2QwMzEwODZlNTU2MDlj
OGI5ZWU3NmMyOTVmN2IyN2FkM2MzZi4uODI2N2FlYWQyYjA5ZGFkNDM2YzEwYzNiZGQ1ZTYyNjQ3
YWIxZWVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTAxLDcgKzUw
MSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwUHJvZmlsZXIu
Y3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3QuY3BwCiAgICAgaGVhcC9IZWFwU25hcHNob3RCdWls
ZGVyLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAogICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCiAgICAgaGVhcC9MYXJnZUFs
bG9jYXRpb24uY3BwCkBAIC04MDAsNiArNzk5LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKICAgICBydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCiAgICAgcnVudGltZS9KU1Byb3h5LmNwcAorICAg
IHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuY3BwCiAgICAgcnVudGltZS9KU1Njb3BlLmNwcAogICAg
IHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcAogICAgIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAKQEAgLTg0OSw2ICs4NDksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHAKICAgICBydW50aW1lL09wdGlvbnMuY3Bw
CiAgICAgcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKKyAgICBydW50aW1lL1Byb21pc2VE
ZWZlcnJlZFRpbWVyLmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAogICAg
IHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAK
QEAgLTk0Miw2ICs5NDMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHdhc20v
V2FzbVBsYW4uY3BwCiAgICAgd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAogICAgIHdhc20vV2FzbVZh
bGlkYXRlLmNwcAorICAgIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCiAgICAgd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q2FsbGVlLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjAwMzEwYzM3YWIxNGE3MmRmNTdh
YjI5MWM4MmNhNzQwMzc4M2MwZC4uZWJhNGMzMjA3YmQzZmJiNjNhMmMwYjM4YTYyNzk4NThkYWQz
ZGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMTYsMTEgKzEzMTYsMTcg
QEAKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OworCQk1
MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlE
RCAvKiBXYXNtV29ya2xpc3QuY3BwICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIg
LyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEz
NzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdh
c21QbGFuLmNwcCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURF
MURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0MUZDNzAxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwICovOyB9OwogCQk1MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCAqLzsgfTsKKwkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEgLyog
SlNSdW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAq
LzsgfTsKKwkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3
NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuaCAqLzsgfTsKKwkJNTM0
NjM4NzcxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc2MUU3MUUwNkUw
MEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMx
Nzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJ
CTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZG
M0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgKi87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNC
OCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVz
dC5jcHAgKi87IH07CkBAIC0xMzU1LDYgKzEzNjEsNyBAQAogCQk1M0Y0MEU5NTFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQ
YXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovOyB9Owog
CQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTNGOEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGOEQxRkYxRTgzODdENDAwRDIx
MTE2IC8qIFdhc21QbGFuSW5saW5lcy5oICovOyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3
RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJNTNGRDA0RDMxRDdBQjI3
NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyog
V2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKQEAgLTIyMzMsOCArMjI0MCw2IEBACiAJ
CUMyQ0YzOUMxMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgx
MDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1
QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggKi87IH07CiAJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBI
ZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzJFNTI2QkQxNTkwRUYwMDAw
NTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAq
LzsgfTsKLQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFNTI2QkMxNTkwRUYwMDAw
NTRFNDhEIC8qIEhlYXBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJl
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9Owog
CQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovOyB9OwogCQlDMkZDQUUxMTE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTM4MDAsMTEgKzM4MDUsMTcgQEAKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAv
KiBXYXNtV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdv
cmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMEZCMzAzMUU3QTExNDYw
MDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbVdvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNSdW5Mb29wVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzIx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTUnVuTG9vcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRp
bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRp
bWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODc2MUU3MUUwNkUwMEYx
MkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcm9taXNlRGVmZXJyZWRUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDg2QkJBMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0OTAyODIxQzcyNDJDODAw
MTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBUeXBlZEFycmF5Q1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1R5cGVkQXJy
YXlDVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ1LDYgKzM4NTYs
NyBAQAogCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNt
TW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2
QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4
N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3ODgsOCArNDgwMCw2IEBACiAJCUMyQ0YzOUJGMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBw
ZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVy
T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMkU1MjZCQjE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhlYXBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUMyRTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGVhcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MDQsOCArNTkxNCw2IEBACiAJCQkJQTU0QzJBQUYx
QzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovLAogCQkJCUE1MzExQzM0MUM3N0NF
QUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLywKIAkJCQlBNTMxMUMzNTFD
NzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oICovLAotCQkJCUMyRTUyNkJC
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAotCQkJCUMyRTUyNkJDMTU5MEVG
MDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5j
cmVtZW50YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCkBAIC02MjczLDExICs2MjgxLDE0IEBACiAJCQkJNTNG
NDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFE
NUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYw
MEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAv
KiBXYXNtUGxhbklubGluZXMuaCAqLywKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2ln
bmF0dXJlLmggKi8sCiAJCQkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0
ZS5jcHAgKi8sCiAJCQkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5o
ICovLAorCQkJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICov
LAorCQkJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NDM0
LDYgKzY0NDUsOCBAQAogCQkJCTE0QTE1NjMwMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFu
Y2VDYWNoZS5oICovLAogCQkJCUJDRDIwMzQ3MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90
eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlw
ZS5oICovLAorCQkJCTUzNDYzODc2MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRU
aW1lci5jcHAgKi8sCisJCQkJNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZl
cnJlZFRpbWVyLmggKi8sCiAJCQkJMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVBy
b3BlcnR5QXR0cmlidXRlcy5oICovLAogCQkJCTBGRTA1MDBGMUFBOTA5MTEwMEQzM0IzMyAvKiBE
aXJlY3RBcmd1bWVudHMuY3BwICovLAogCQkJCTBGRTA1MDEwMUFBOTA5MTEwMEQzM0IzMyAvKiBE
aXJlY3RBcmd1bWVudHMuaCAqLywKQEAgLTY4MjIsNiArNjgzNSw4IEBACiAJCQkJMEY3QzM5RkMx
QzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJCQlCQ0QyMDJC
RjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJD
MDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCisJCQkJNTM0NjM4NzIx
RTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3MDFF
NzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQk3MEIwQTlEMDFBOUI2
NjIwMDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggKi8sCiAJCQkJNTI3NzczREQxQUFGODNBQzAw
QkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLywKIAkJCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFE
QkEgLyogUnVudGltZVR5cGUuaCAqLywKQEAgLTgxMTYsNiArODEzMSw3IEBACiAJCQkJMEZFQzg1
MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0Nv
bXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDgg
LyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMzUsNiArODI1MSw3IEBACiAJCQkJ
QkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjJFQzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFt
ZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRC
Q0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODUyMSw2
ICs4NTM4LDcgQEAKIAkJCQlFM0ZGNzUzMzFEOUNFQTE4MDBDN0UxNkQgLyogRE9NSklUR2V0dGVy
U2V0dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyog
RE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0MwOEUzQzFEQTQxQjgxMDAz
OTQ3OEYgLyogRE9NSklUUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0NjM4NzEx
RTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM3QUQ4M0MxREE0OTI4NjAwRjNENDEyIC8qIERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzN0FEODNEMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRSZWcuaCBp
biBIZWFkZXJzICovLApAQCAtODY5MCw3ICs4NzA4LDYgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0
MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFD
NjU0NEYyMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMx
MUMzNjFDNzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJl
dHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzksNiArOTE1Niw3IEBACiAJCQkJQkMx
OEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3
MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4
MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdC
MjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5NTgsNiArOTk3
Niw3IEBACiAJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMEZCMzA0MUU3
QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0
MjJBNjIxQzE1OEU2QTAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzM4REY1MUJFOTNENTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhFMEQxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0
YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI1MSw2ICsxMDI3MCw3IEBACiAJCQkJ
MTRBRDkxMTcxRENBOTdGRDAwMTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3MzQxRTIxREMyQ0U5NjAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1NDk4MjAzMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3Au
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM0NjM4NzMxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZD
QSAvKiBFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MEMxOUIxRDc3NkE5ODAw
ODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxMkRFMEYxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDMyOCw3ICsxMDM0OCw2IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYz
IC8qIEhlYXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVF
MDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3
MUM3N0NFQ0EwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUMyRTUyNkJEMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElD
U3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8q
IElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDY1Miw2ICsxMDY3MSw3IEBACiAJ
CQkJOTkyQUJDRjkxQkVBOUJEMjAwNjQwM0EwIC8qIFJlbW90ZUF1dG9tYXRpb25UYXJnZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyRjU2QjQxRTRFODRBNDAwMzU5NTNCIC8qIFJlbW90ZUNv
bm5lY3Rpb25Ub1RhcmdldENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4RUQ2NzQxQkVE
NzBBQzAwREQ4MDE3IC8qIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90
ZUluc3BlY3Rpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NTY2ODYxRTRFOEIw
RjAwQUFFMTNDIC8qIFJlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJG
NTZCNTFFNEU4NEE4MDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yQ29jb2EubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQWN0aXZpdHlD
YWxsYmFjay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNr
LmgKaW5kZXggZGRlZTI1ODNlNDllNmI5NjkzOTA4MGUzMzhlYjVhOTljMDQwYjkyYy4uYWY0NzU4
OGQ2MDExOWFkOGRkNTE1ZDhmNGE1MGNmYzcyOTU4MTMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxv
b3BUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRikKQEAgLTQw
LDggKzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
OwogY2xhc3MgSGVhcDsKIAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxi
YWNrIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKICAgICBzdGF0aWMgUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IGNyZWF0ZUZ1bGxUaW1lcihIZWFwKik7CiAgICAgc3RhdGljIFJlZlB0cjxHQ0Fj
dGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZUVkZW5UaW1lcihIZWFwKik7CiAKQEAgLTcwLDIxICs3MSwy
MSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBVU0UoQ0YpCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZN
KiB2bSkKLSAgICAgICAgOiBIZWFwVGltZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAg
ICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBtX2RlbGF5KHNfZGVjYWRlKQogICAgIHsK
ICAgICB9CiAjZWxpZiBVU0UoR0xJQikKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQot
ICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1f
ZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUpCiAgICAgewogICAgIH0K
ICNlbHNlCiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrKFZNKiB2bSkKLSAgICAgICAgOiBIZWFwVGlt
ZXIodm0pCisgICAgICAgIDogQmFzZSh2bSkKICAgICAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKICAg
ICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRp
bWVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTYxMjhkMDM4MzhjYTRhNzQ1NTBlZDkxNmRmNzdh
MzI1ZDZiNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIK
LQotI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdHJpbmcuaCIK
LSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGli
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgCi1jb25z
dCBDRlRpbWVJbnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0gNjAgKiA2MCAqIDI0ICogMzY1
ICogMTA7Ci0KLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZNKiB2bSkKLSAgICA6IG1fdm0odm0pCi0g
ICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCi17Ci0gICAgc2V0UnVuTG9vcCh2bS0+aGVh
cC5ydW5Mb29wKCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BS
ZWYgcnVuTG9vcCkKLXsKLSAgICBpZiAobV9ydW5Mb29wKSB7Ci0gICAgICAgIENGUnVuTG9vcFJl
bW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkp
OwotICAgICAgICBtX3J1bkxvb3AuY2xlYXIoKTsKLSAgICAgICAgbV90aW1lci5jbGVhcigpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAocnVuTG9vcCkgewotICAgICAgICBtX3J1bkxvb3AgPSBydW5M
b29wOwotICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwgMCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVy
Q29udGV4dCkpOwotICAgICAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7Ci0gICAgICAgIG1fdGlt
ZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNf
ZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRl
eHQpKTsKLSAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVy
LmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIH0KLX0KLQotSGVhcFRpbWVyOjp+
SGVhcFRpbWVyKCkKLXsKLSAgICBzZXRSdW5Mb29wKDApOwotfQotCi12b2lkIEhlYXBUaW1lcjo6
dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBjb250ZXh0UHRyKQotewotICAg
IEhlYXBUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihjb250ZXh0UHRyKTsK
LSAgICB0aW1lci0+bV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBSZWZQdHI8Vk0+IHZtID0gdGlt
ZXItPm1fYXBpTG9jay0+dm0oKTsKLSAgICBpZiAoIXZtKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBo
YXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIHRp
bWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLmdldCgpKTsKLSAgICAgICAgdGltZXIt
PmRvV29yaygpOwotICAgIH0KLQotICAgIHRpbWVyLT5tX2FwaUxvY2stPnVubG9jaygpOwotfQot
Ci12b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMp
Ci17Ci0gICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7Ci0gICAgbV9pc1Nj
aGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17Ci0g
ICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgKyBzX2RlY2FkZSk7Ci0gICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNl
OwotfQotCi0jZWxpZiBVU0UoR0xJQikKLQotY29uc3QgbG9uZyBIZWFwVGltZXI6OnNfZGVjYWRl
ID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgaGVhcFRp
bWVyU291cmNlRnVuY3Rpb25zID0gewotICAgIG51bGxwdHIsIC8vIHByZXBhcmUKLSAgICBudWxs
cHRyLCAvLyBjaGVjawotICAgIC8vIGRpc3BhdGNoCi0gICAgW10oR1NvdXJjZSosIEdTb3VyY2VG
dW5jIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjYWxsYmFjayh1c2VyRGF0YSk7Ci0gICAgfSwKLSAgICBudWxscHRyLCAvLyBm
aW5hbGl6ZQotICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKLSAgICBudWxscHRyLCAv
LyBjbG9zdXJlX21hcnNoYWxsCi19OwotCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSogdm0pCi0g
ICAgOiBtX3ZtKHZtKQotICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9jaygpKQotICAgICwgbV90
aW1lcihhZG9wdEdSZWYoZ19zb3VyY2VfbmV3KCZoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMsIHNp
emVvZihHU291cmNlKSkpKQotewotICAgIGdfc291cmNlX3NldF9uYW1lKG1fdGltZXIuZ2V0KCks
ICJbSmF2YVNjcmlwdENvcmVdIEhlYXBUaW1lciIpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewotICAg
ICAgICBhdXRvJiBoZWFwVGltZXIgPSAqc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4odXNlckRhdGEp
OwotICAgICAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShoZWFwVGltZXIubV90aW1lci5nZXQo
KSwgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSArIEhlYXBUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNf
UEVSX1NFQyk7Ci0gICAgICAgIGhlYXBUaW1lci50aW1lckRpZEZpcmUoKTsKLSAgICAgICAgcmV0
dXJuIEdfU09VUkNFX0NPTlRJTlVFOwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3RpbWVyLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1
bHQoKSk7Ci19Ci0KLUhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCi17Ci0gICAgZ19zb3VyY2VfZGVz
dHJveShtX3RpbWVyLmdldCgpKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSgp
Ci17Ci0gICAgbV9hcGlMb2NrLT5sb2NrKCk7Ci0KLSAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkg
ewotICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgotICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOwotICAg
ICAgICBkb1dvcmsoKTsKLSAgICB9Ci0KLSAgICBtX2FwaUxvY2stPnVubG9jaygpOwotfQotCi12
b2lkIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCi17
Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rv
bmljX3RpbWUoKSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSB0cnVlOwotfQotCi12b2lkIEhlYXBUaW1lcjo6Y2FuY2VsVGltZXIoKQot
ewotICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKG1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90
b25pY190aW1lKCkgKyBzX2RlY2FkZSAqIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBtX2lzU2NoZWR1
bGVkID0gZmFsc2U7Ci19Ci0jZWxzZQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAg
IDogbV92bSh2bSkKLXsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLX0KLQotdm9p
ZCBIZWFwVGltZXI6OmludmFsaWRhdGUoKQotewotfQotCi12b2lkIEhlYXBUaW1lcjo6c2NoZWR1
bGVUaW1lcihkb3VibGUpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxUaW1lcigpCi17
Ci19Ci0jZW5kaWYKLSAgICAKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI0NzFm
NjBkYjhjNjM3NGM1NTAxOThkMGJlOWUyZmNjYThhNmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBU
aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNp
bmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEpTTG9jazsKLWNsYXNzIFZNOwotCi1jbGFzcyBIZWFwVGltZXIgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8SGVhcFRpbWVyPiB7Ci1wdWJsaWM6Ci0gICAgSGVhcFRpbWVyKFZN
Kik7Ci0jaWYgVVNFKENGKQotICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1bkxvb3BU
aW1lclJlZiwgdm9pZCopOwotI2VuZGlmCi0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKLQotICAg
IHZvaWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpOwotICAgIHZvaWQg
Y2FuY2VsVGltZXIoKTsKLSAgICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NjaGVkdWxlZDsgfQotCi0jaWYgVVNFKENGKQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYpOwotI2VuZGlmIC8vIFVTRShDRikKLSAgICAKLXByb3Rl
Y3RlZDoKLSAgICBWTSogbV92bTsKLQotICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKLSAg
ICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OwotI2lmIFVTRShDRikKLSAgICBzdGF0aWMg
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
VGltZXJSZWY+IG1fdGltZXI7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29w
OwotICAgIAotICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7Ci0KLSAgICBMb2Nr
IG1fc2h1dGRvd25NdXRleDsKLSNlbGlmIFVTRShHTElCKQotICAgIHN0YXRpYyBjb25zdCBsb25n
IHNfZGVjYWRlOwotICAgIHZvaWQgdGltZXJEaWRGaXJlKCk7Ci0gICAgR1JlZlB0cjxHU291cmNl
PiBtX3RpbWVyOwotI2VuZGlmCi0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgaW52YWxpZGF0ZSgp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2
MzU2Njk0MTFlMTdkYzBhYzUyLi44Y2JmYTllODA0MGRjNjFlZmIwMTliMjE0NTU0NDU1ZTJmYTgz
MWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5jcHAKQEAgLTQxLDExICs0MSwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHN3ZWVwVGlt
ZU11bHRpcGxpZXIgPSAxLjAgLyBzd2VlcFRpbWVUb3RhbDsKIAogdm9pZCBJbmNyZW1lbnRhbFN3
ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQogewotICAgIEhlYXBUaW1lcjo6c2NoZWR1bGVUaW1lcihz
d2VlcFRpbWVTbGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOworICAgIEJhc2U6OnNjaGVkdWxl
VGltZXIoc3dlZXBUaW1lU2xpY2UgKiBzd2VlcFRpbWVNdWx0aXBsaWVyKTsKIH0KIAogSW5jcmVt
ZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCkKLSAgICA6IEhlYXBU
aW1lcihoZWFwLT52bSgpKQorICAgIDogQmFzZShoZWFwLT52bSgpKQogICAgICwgbV9jdXJyZW50
QWxsb2NhdG9yKG51bGxwdHIpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCmluZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3Yzc4OWE2
YWUxMTk4MDNiZTYuLjc2ZDQ1NGYzYzA0YjMxYmQxMTRiODA3MTQzZTRkMWUxNWE0ZTViYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSGVhcFRpbWVyLmgi
CisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IEhlYXA7CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAKLWNsYXNzIEluY3JlbWVudGFsU3dlZXBl
ciA6IHB1YmxpYyBIZWFwVGltZXIgeworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGlj
IEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNSdW5Mb29wVGlt
ZXI7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW5jcmVtZW50YWxTd2VlcGVyKEhl
YXAqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRTd2VlcGluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CmluZGV4IDZlMzE3NmMyY2M3NmI2ODQ0YzNhZmViMDczYzZiY2ExM2Y0NWQzY2MuLjk0MGQzOWRl
MjRhY2ZkMzJkOTZhNGFjMjFlZDJjMmE1MzE3YzIxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBTdG9wSWZOZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNz
YXJ5VGltZXIoVk0qIHZtKQotICAgIDogSGVhcFRpbWVyKHZtKQorICAgIDogQmFzZSh2bSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRp
bWVyLmgKaW5kZXggYTY4MzE4NDc0ODljODZjMzZiNjg5ZTE4ZGEwNDg2M2ExZTRlZTQ0NS4uZTE4
MzZhMTRjOGVkNTJhMjU4ZjQ2MjA3MjM1YjA1NGI5Y2EyYWVhYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCkBAIC0yNSwxNCArMjUs
MTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFwVGltZXIuaCIKKyNpbmNsdWRl
ICJKU1J1bkxvb3BUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAot
Y2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIFN0
b3BJZk5lY2Vzc2FyeVRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKIHB1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSlNSdW5Mb29wVGltZXI7CiAgICAgZXhwbGljaXQgU3RvcElmTmVjZXNz
YXJ5VGltZXIoVk0qKTsKICAgICAKICAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Ryb25nSW5saW5lcy5oCmluZGV4IDZiODE5N2M2ODY2YTA1
OTk1YjMyYTg4YmU3OTQxZGQwZmQxYjkwYTYuLjIwNWZiMDRmYjY5MTQ3ZDhmZDVlNzJhZTEwYTAz
MmQ1MWUxM2Q5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVz
LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAppbmRleCBhZDRhMzE0MDhhNmIzNWIyOWQzYzU0YjkxYTM2OTBlNWU1MDEwYTQ3
Li5kZDZjYWZkMDc3ZmRhMTJhNWJhYzM0OWMyZTVjOTU1MDc2NjdiYTk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiUGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ1Byb2ZpbGVyLmgiCkBAIC03Myw4ICs3NCw5IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5l
clV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21X
b3JrbGlzdC5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNs
dWRlIDxzdGRpby5oPgpAQCAtOTA3LDggKzkwOSw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRH
ZXR0ZXJDb21wbGV4OjpzX2luZm8gPSB7ICJET01KSVRHZXR0ZXJDb21wbGV4IiwgJkJhc2U6OnNf
CiBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUpJ
VEZ1bmN0aW9uT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShET01KSVRGdW5jdGlvbk9iamVjdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJy
YXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogY29uc3QgQ2xhc3NJbmZvIFNpbXBs
ZU9iamVjdDo6c19pbmZvID0geyAiU2ltcGxlT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShTaW1wbGVPYmplY3QpIH07Ci1zdGF0aWMgYm9vbCB0ZXN0
MjYyQXN5bmNQYXNzZWQgeyBmYWxzZSB9Owotc3RhdGljIGJvb2wgdGVzdDI2MkFzeW5jVGVzdCB7
IGZhbHNlIH07CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0UGFzc2VzIHsgMCB9Oworc3RhdGlj
IHVuc2lnbmVkIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzIHsgMCB9OwogCiBFbGVtZW50SGFuZGxl
T3duZXIqIEVsZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsKQEAgLTEwNzcsNiArMTA3OSw4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxl
clN0YWNrVHJhY2VzKEV4ZWNTdGF0CiAjZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdFN0YXJ0KEV4ZWNTdGF0
ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rl
c3RQYXNzZWQoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKEV4ZWNTdGF0ZSopOwpAQCAtMTM0OSw2ICsxMzUzLDkgQEAgcHJvdGVjdGVkOgogCiAgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAibWF4QXJndW1lbnRzIiwgZnVuY3Rpb25NYXhBcmd1bWVudHMs
IDApOwogCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXN5bmNUZXN0U3RhcnQiLCBmdW5jdGlv
bkFzeW5jVGVzdFN0YXJ0LCAxKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RQ
YXNzZWQiLCBmdW5jdGlvbkFzeW5jVGVzdFBhc3NlZCwgMSk7CisKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAidGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMi
LCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zLCAwKTsKICNlbmRpZgpAQCAtMTczMiwx
MSArMTczOSwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjU3Rh
dGUqIGV4ZWMsIEZJTEUqIG91dCkKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICh0ZXN0MjYyQXN5bmNU
ZXN0KSB7CisgICAgaWYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5n
KCkgJiYgV1RGOjplcXVhbChhc1N0cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRl
c3QyNjI6QXN5bmNUZXN0Q29tcGxldGUiKSkKLSAgICAgICAgICAgIHRlc3QyNjJBc3luY1Bhc3Nl
ZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFs
dWUpLT52YWx1ZShleGVjKS5pbXBsKCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpIHsK
KyAgICAgICAgICAgIGFzeW5jVGVzdFBhc3NlcysrOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtMzA0
OSw2ICszMDU3LDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhB
cmd1bWVudHMoRXhlY1N0YXRlKikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KEpTQzo6bWF4QXJndW1lbnRzKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Bc3luY1Rlc3RTdGFydChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1ZhbHVlIG51bWJlck9mQXN5bmNQYXNzZXMgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAg
ICBpZiAoIW51bWJlck9mQXN5bmNQYXNzZXMuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFeHBlY3RlZCBmaXJzdCBhcmd1
bWVudCB0byBhIHVpbnQzMiIpKTsKKworICAgIGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzICs9IG51
bWJlck9mQXN5bmNQYXNzZXMuYXNVSW50MzIoKTsKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZp
bmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Bc3luY1Rl
c3RQYXNzZWQoRXhlY1N0YXRlKikKK3sKKyAgICBhc3luY1Rlc3RQYXNzZXMrKzsKKyAgICByZXR1
cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
IHN0YXRpYyBDU3RyaW5nIHZhbHVlV2l0aFR5cGVPZldhc21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSB3YXNtVmFsdWUpCkBAIC0zMTU5LDIxICsz
MTg2LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVz
dFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBlCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSBmdW5jdGlvbkNvdW50ICsgMikKICAgICAgICAgQ1JBU0goKTsKIAotICAgIFdh
c206OlBsYW4gcGxhbigmdm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2UtPnZlY3Rvcigp
KSwgc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgcGxhbi5ydW4oKTsKLSAgICBpZiAocGxhbi5mYWls
ZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBs
YW4uZXJyb3JNZXNzYWdlKCkpOworICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBXYXNtOjpQbGFuKHZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291cmNlLT52ZWN0b3Io
KSksIHNvdXJjZS0+bGVuZ3RoKCksIFdhc206OlBsYW46OkZ1bGxDb21waWxlLCBXYXNtOjpQbGFu
Ojpkb250RmluYWxpemUpKTsKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxh
bi5jb3B5UmVmKCkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3lu
Y2hyb25vdXNseShwbGFuLmdldCgpKTsKKyAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgbW9kdWxlOiAiLCBwbGFuLT5lcnJvck1lc3Nh
Z2UoKSk7CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgaWYgKHBsYW4uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKKyAgICBpZiAocGxhbi0+aW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0goKTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
a2VlcEFsaXZlOwogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7
Ci0gICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLAorICAgICAgICBwbGFuLT5pbml0aWFsaXplQ2FsbGVlcygKICAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0g
MSA9PSBsYXN0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChqc0VudHJ5
cG9pbnRDYWxsZWUpOwpAQCAtMzE4MSw3ICszMjA5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUq
IGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBjYWxsZWVJbmRleDsKICAgICAgICAgICAg
IH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9u
ID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1v
ZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMzY2Niw3ICszNjk0LDcgQEAgdm9pZCBDb21tYW5k
TGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXN0MjYyLWFzeW5jIikpIHsKLSAgICAgICAg
ICAgIHRlc3QyNjJBc3luY1Rlc3QgPSB0cnVlOworICAgICAgICAgICAgYXN5bmNUZXN0RXhwZWN0
ZWRQYXNzZXMrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM3Mzgs
NDggKzM3NjYsNjQgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBjb25zdCBGdW5j
JiBmdW5jKQogICAgIFdvcmtlciB3b3JrZXIoV29ya2Vyczo6c2luZ2xldG9uKCkpOwogICAgIAog
ICAgIFZNJiB2bSA9IFZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcigmdm0pOwotCiAgICAgaW50IHJlc3VsdDsKLSAgICBpZiAob3B0aW9ucy5t
X3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgdm0ubV9wZXJC
eXRlY29kZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9maWxlcjo6RGF0YWJhc2U+KHZt
KTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0Ojpj
cmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSksIG9w
dGlvbnMubV9hcmd1bWVudHMpOwotICAgIGdsb2JhbE9iamVjdC0+c2V0UmVtb3RlRGVidWdnaW5n
RW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVidWdnaW5nKTsKLSAgICBib29sIHN1Y2Nl
c3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3Rp
dmUgJiYgc3VjY2VzcykKLSAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
CisgICAgICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFByb2ZpbGVyOjpEYXRhYmFzZT4odm0pOwogCi0gICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7Ci0g
ICAgcmVzdWx0ID0gc3VjY2VzcyAmJiAodGVzdDI2MkFzeW5jVGVzdCA9PSB0ZXN0MjYyQXN5bmNQ
YXNzZWQpID8gMCA6IDM7CisgICAgICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xv
YmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBq
c051bGwoKSksIG9wdGlvbnMubV9hcmd1bWVudHMpOworICAgICAgICBnbG9iYWxPYmplY3QtPnNl
dFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQob3B0aW9ucy5tX2VuYWJsZVJlbW90ZURlYnVnZ2luZyk7
CisgICAgICAgIHN1Y2Nlc3MgPSBmdW5jKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICBpZiAo
b3B0aW9ucy5tX2ludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCisgICAgICAgICAgICBydW5JbnRlcmFj
dGl2ZShnbG9iYWxPYmplY3QpOworCisgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOworICAg
IH0KKyNpZiBVU0UoQ0YpCisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnJ1blJ1bkxvb3Ao
KTsKKyNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMubV9leGl0Q29kZSkKLSAgICAgICAgcHJpbnRm
KCJqc2MgZXhpdGluZyAlZFxuIiwgcmVzdWx0KTsKKyAgICByZXN1bHQgPSBzdWNjZXNzICYmIChh
c3luY1Rlc3RFeHBlY3RlZFBhc3NlcyA9PSBhc3luY1Rlc3RQYXNzZXMpID8gMCA6IDM7CisKKyAg
ICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKSB7CisgICAgICAgIHByaW50ZigianNjIGV4aXRpbmcg
JWQiLCByZXN1bHQpOworICAgICAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgIT0gYXN5
bmNUZXN0UGFzc2VzKQorICAgICAgICAgICAgcHJpbnRmKCIgYmVjYXVzZSBleHBlY3RlZDogJWQg
YXN5bmMgdGVzdCBwYXNzZXMgYnV0IGdvdDogJWQgYXN5bmMgdGVzdCBwYXNzZXMiLCBhc3luY1Rl
c3RFeHBlY3RlZFBhc3NlcywgYXN5bmNUZXN0UGFzc2VzKTsKKyAgICAgICAgcHJpbnRmKCJcbiIp
OworICAgIH0KIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSkgeworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgaWYgKCF2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PnNhdmUob3B0aW9ucy5tX3Byb2ZpbGVyT3V0cHV0LnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgc2F2ZSBwcm9maWxlciBvdXRwdXQuXG4iKTsK
ICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25G
dXp6KCkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAl
dSBjaGVja3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7Ci0gICAgYm9vbCBm
aXJlQXRFbmFibGVkID0KLSAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFmdGVyKCk7
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmly
ZUF0RW5hYmxlZCB8fCBPcHRpb25zOjp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkp
KQotICAgICAgICBwcmludGYoIkpTQyBFWEVDVVRBQkxFIEFMTE9DQVRJT04gRlVaWjogZW5jb3Vu
dGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVj
a3MoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKLSAgICAgICAgcHJp
bnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIs
IG51bWJlck9mU3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7Ci0gICAgICAgIHByaW50ZigiSlND
IE9TUiBFWElUIEZVWlo6IGVuY291bnRlcmVkICV1IGR5bmFtaWMgY2hlY2tzLlxuIiwgbnVtYmVy
T2ZPU1JFeGl0RnV6ekNoZWNrcygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBpbGVUaW1lU3Rh
dHMgPSBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gY29tcGls
ZVRpbWVLZXlzOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBjb21waWxlVGltZVN0YXRzKQotICAg
ICAgICBjb21waWxlVGltZUtleXMuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgc3RkOjpzb3J0KGNv
bXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtleXMuZW5kKCkpOwotICAgIGZvciAo
Q1N0cmluZyBrZXkgOiBjb21waWxlVGltZUtleXMpCi0gICAgICAgIHByaW50ZigiJTQwczogJS4z
bGYgbXNcbiIsIGtleS5kYXRhKCksIGNvbXBpbGVUaW1lU3RhdHMuZ2V0KGtleSkpOworICAgIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VFeGNlcHRpb25GdXp6KCkpCisgICAgICAgICAgICBwcmludGYoIkpTQyBFWENFUFRJT04gRlVa
WjogZW5jb3VudGVyZWQgJXUgY2hlY2tzLlxuIiwgbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tz
KCkpOworICAgICAgICBib29sIGZpcmVBdEVuYWJsZWQgPQorICAgICAgICBPcHRpb25zOjpmaXJl
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6QXRPckFmdGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9z
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVY
RUNVVEFCTEUgQUxMT0NBVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1i
ZXJPZkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZU9TUkV4aXRGdXp6KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiSlNDIE9TUiBFWElU
IEZVWlo6IGVuY291bnRlcmVkICV1IHN0YXRpYyBjaGVja3MuXG4iLCBudW1iZXJPZlN0YXRpY09T
UkV4aXRGdXp6Q2hlY2tzKCkpOworICAgICAgICAgICAgcHJpbnRmKCJKU0MgT1NSIEVYSVQgRlVa
WjogZW5jb3VudGVyZWQgJXUgZHluYW1pYyBjaGVja3MuXG4iLCBudW1iZXJPZk9TUkV4aXRGdXp6
Q2hlY2tzKCkpOworICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29tcGlsZVRp
bWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpOworICAgICAgICBWZWN0b3I8Q1N0cmlu
Zz4gY29tcGlsZVRpbWVLZXlzOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tcGlsZVRp
bWVTdGF0cykKKyAgICAgICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsK
KyAgICAgICAgc3RkOjpzb3J0KGNvbXBpbGVUaW1lS2V5cy5iZWdpbigpLCBjb21waWxlVGltZUtl
eXMuZW5kKCkpOworICAgICAgICBmb3IgKENTdHJpbmcga2V5IDogY29tcGlsZVRpbWVLZXlzKQor
ICAgICAgICAgICAgcHJpbnRmKCIlNDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGls
ZVRpbWVTdGF0cy5nZXQoa2V5KSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6
Z2NBdEVuZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2VEZWZlcnJlZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5jcHAKaW5kZXggNjk2N2UwM2FmZTE1NDI0NGQxZTJkMGNiMDNhNDYxMDg5
NDA1MDFkNS4uMWRhMDYwMWY4OTc4ZTEwZmY4OTNjYTMxZTFiM2U4ZmJkZDI1MmM2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk5
LDExICsxMDAsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIEpTVmFsdWUgdmFsdWUKIHZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNh
bGxGdW5jdGlvbihleGVjLCBtX3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1Bl
bmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJv
bWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0g
bV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlYXNvbikKIHsKICAgICBjYWxsRnVuY3Rp
b24oZXhlYywgbV9yZWplY3QuZ2V0KCksIHJlYXNvbik7CisgICAgYm9vbCB3YXNQZW5kaW5nID0g
ZXhlYy0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+Y2FuY2VsUGVuZGluZ1Byb21pc2UodGhp
cyk7CisgICAgQVNTRVJUX1VOVVNFRCh3YXNQZW5kaW5nLCB3YXNQZW5kaW5nID09IG1fcHJvbWlz
ZUlzQXN5bmNQZW5kaW5nKTsKIH0KIAogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiByZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCAyNmY0YTgyZDA4Y2EwMjIw
ZWRkNTE5Njg1Mjk4MjJiY2FiOWFjNmZkLi4wOTIyYTk0ZDkzM2NjZWM1OWE0YTE3ZmNiZDIyYzM3
MjNkYTUwY2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VEZWZlcnJlZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZURlZmVycmVkLmgKQEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIHByb21pc2VBc3luY1BlbmRpbmcoKSB7IG1fcHJvbWlzZUlzQXN5bmNQ
ZW5kaW5nID0gdHJ1ZTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU1Byb21pc2VEZWZl
cnJlZChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09i
amVjdCosIEpTVmFsdWUsIEpTVmFsdWUpOwpAQCAtNjQsNiArNjgsMTAgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBKU1Byb21pc2VEZWZlcnJlZChWTSYpOwogCisjaWZuZGVmIE5ERUJVRwor
ICAgIGJvb2wgbV9wcm9taXNlSXNBc3luY1BlbmRpbmcgeyBmYWxzZSB9OworI2VuZGlmCisKICAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fcHJvbWlzZTsKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9yZXNvbHZlOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlamVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZmMxMzkxYTY2MjZiMzg4ZjE0ZTE4MmM3MmFhZTNjZTZiNzZlODQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUnVuTG9v
cFRpbWVyLmgiCisKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoR0xJQikKKyNp
bmNsdWRlIDxnbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0Yp
CisKK2NvbnN0IENGVGltZUludGVydmFsIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICog
NjAgKiAyNCAqIDM2NSAqIDEwOworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0q
IHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKK3sK
KyAgICBzZXRSdW5Mb29wKHZtLT5oZWFwLnJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29w
VGltZXI6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCit7CisgICAgaWYgKG1fcnVu
TG9vcCkgeworICAgICAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1f
dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgIENGUnVuTG9vcFRp
bWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLmNsZWFyKCk7
CisgICAgICAgIG1fdGltZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAocnVuTG9vcCkgewor
ICAgICAgICBtX3J1bkxvb3AgPSBydW5Mb29wOworICAgICAgICBtZW1zZXQoJm1fY29udGV4dCwg
MCwgc2l6ZW9mKENGUnVuTG9vcFRpbWVyQ29udGV4dCkpOworICAgICAgICBtX2NvbnRleHQuaW5m
byA9IHRoaXM7CisgICAgICAgIG1fdGltZXIgPSBhZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgc19kZWNh
ZGUsIHNfZGVjYWRlLCAwLCAwLCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250
ZXh0KSk7CisgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1l
ci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICB9Cit9CisKK0pTUnVuTG9vcFRp
bWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIHNldFJ1bkxvb3AoMCk7Cit9CisKK3ZvaWQg
SlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogY29u
dGV4dFB0cikKK3sKKyAgICBKU1J1bkxvb3BUaW1lciogdGltZXIgPSBzdGF0aWNfY2FzdDxKU1J1
bkxvb3BUaW1lcio+KGNvbnRleHRQdHIpOworICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsK
KworICAgIFJlZlB0cjxWTT4gdm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOworICAgIGlmICgh
dm0pIHsKKyAgICAgICAgLy8gVGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KKyAgICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dm0uZ2V0KCkpOworICAgICAgICB0aW1lci0+ZG9Xb3JrKCk7CisgICAgfQorCisgICAgdGltZXIt
Pm1fYXBpTG9jay0+dW5sb2NrKCk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxl
VGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQoreworICAgIENGUnVuTG9vcFRpbWVyU2V0
TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsg
aW50ZXJ2YWxJblNlY29uZHMpOworICAgIG1faXNTY2hlZHVsZWQgPSB0cnVlOworfQorCit2b2lk
IEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7CisgICAgQ0ZSdW5Mb29wVGltZXJTZXRO
ZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBz
X2RlY2FkZSk7CisgICAgbV9pc1NjaGVkdWxlZCA9IGZhbHNlOworfQorCisjZWxpZiBVU0UoR0xJ
QikKKworY29uc3QgbG9uZyBKU1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQg
KiAzNjUgKiAxMDsKKworc3RhdGljIEdTb3VyY2VGdW5jcyBKU1J1bkxvb3BUaW1lclNvdXJjZUZ1
bmN0aW9ucyA9IHsKKyAgICBudWxscHRyLCAvLyBwcmVwYXJlCisgICAgbnVsbHB0ciwgLy8gY2hl
Y2sKKyAgICAvLyBkaXNwYXRjaAorICAgIFtdKEdTb3VyY2UqLCBHU291cmNlRnVuYyBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuCisgICAgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2sodXNlckRhdGEpOworICAgIH0sCisgICAgbnVsbHB0ciwgLy8gZmluYWxpemUKKyAg
ICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCisgICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9t
YXJzaGFsbAorfTsKKworSlNSdW5Mb29wVGltZXI6OkpTUnVuTG9vcFRpbWVyKFZNKiB2bSkKKyAg
ICA6IG1fdm0odm0pCisgICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCisgICAgLCBtX3Rp
bWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJkpTUnVuTG9vcFRpbWVyU291cmNlRnVuY3Rpb25z
LCBzaXplb2YoR1NvdXJjZSkpKSkKK3sKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3RpbWVyLmdl
dCgpLCAiW0phdmFTY3JpcHRDb3JlXSBKU1J1bkxvb3BUaW1lciIpOworICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3RpbWVyLmdldCgpLCBbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xl
YW4geworICAgICAgICBhdXRvJiBydW5Mb29wVGltZXIgPSAqc3RhdGljX2Nhc3Q8SlNSdW5Mb29w
VGltZXIqPih1c2VyRGF0YSk7CisgICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKHJ1bkxv
b3BUaW1lci5tX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSlNSdW5Mb29w
VGltZXI6OnNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBydW5Mb29wVGltZXIu
dGltZXJEaWRGaXJlKCk7CisgICAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKKyAgICB9
LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lci5nZXQoKSwgZ19t
YWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworfQorCitKU1J1bkxvb3BUaW1lcjo6
fkpTUnVuTG9vcFRpbWVyKCkKK3sKKyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkp
OworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUoKQoreworICAgIG1fYXBp
TG9jay0+bG9jaygpOworCisgICAgaWYgKCFtX2FwaUxvY2stPnZtKCkpIHsKKyAgICAgICAgLy8g
VGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAg
ICAgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtKTsKKyAgICAgICAgZG9Xb3JrKCk7
CisgICAgfQorCisgICAgbV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BU
aW1lcjo6c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgZ19z
b3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSArIGludGVydmFsSW5TZWNvbmRzICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVs
ZWQgPSB0cnVlOworfQorCit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cisg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19nZXRfbW9ub3Rvbmlj
X3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOworICAgIG1faXNTY2hlZHVsZWQg
PSBmYWxzZTsKK30KKyNlbHNlCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0qIHZt
KQorICAgIDogbV92bSh2bSkKK3sKK30KKworSlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1l
cigpCit7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmludmFsaWRhdGUoKQoreworfQorCit2
b2lkIEpTUnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKK3sKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6Y2FuY2VsVGltZXIoKQoreworfQorI2VuZGlmCisgICAgCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgzZWNiOWNiYzQzYjgwZDMxZWY4YjZiMDQ5YzE3ZWY1YWM0ZmNi
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1
bkxvb3BUaW1lci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
TG9jazsKK2NsYXNzIFZNOworCitjbGFzcyBKU1J1bkxvb3BUaW1lciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxKU1J1bkxvb3BUaW1lcj4geworcHVibGljOgorICAgIEpTUnVuTG9vcFRp
bWVyKFZNKik7CisjaWYgVVNFKENGKQorICAgIHN0YXRpYyB2b2lkIHRpbWVyRGlkRmlyZShDRlJ1
bkxvb3BUaW1lclJlZiwgdm9pZCopOworI2VuZGlmCisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5KU1J1bkxvb3BUaW1lcigpOworICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7
CisKKyAgICB2b2lkIHNjaGVkdWxlVGltZXIoZG91YmxlIGludGVydmFsSW5TZWNvbmRzKTsKKyAg
ICB2b2lkIGNhbmNlbFRpbWVyKCk7CisgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTY2hlZHVsZWQ7IH0KKworI2lmIFVTRShDRikKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKKyNlbmRpZiAvLyBVU0UoQ0YpCisKK3By
b3RlY3RlZDoKKyAgICBWTSogbV92bTsKKworICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsK
KyAgICBib29sIG1faXNTY2hlZHVsZWQgeyBmYWxzZSB9OworI2lmIFVTRShDRikKKyAgICBzdGF0
aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7CisKKyAgICBSZXRhaW5QdHI8Q0ZSdW5M
b29wVGltZXJSZWY+IG1fdGltZXI7CisgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5M
b29wOworCisgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIExvY2sg
bV9zaHV0ZG93bk11dGV4OworI2VsaWYgVVNFKEdMSUIpCisgICAgc3RhdGljIGNvbnN0IGxvbmcg
c19kZWNhZGU7CisgICAgdm9pZCB0aW1lckRpZEZpcmUoKTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fdGltZXI7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKaW5kZXggZGE5OTZlYWEzYzZjY2I2MGJmMTA4YjY5OTczODQyNmY3MWE0OTY3
Yy4uYTBkOTEwOTBlNjJiY2RiMjY2MWMyODZkMzQ0NjcyN2M5MTUxNGU2NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtMjUyLDYgKzI1Miw3IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIG51bWJlck9mRlRMQ29t
cGlsZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDgsIDIpIC0gMSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJU
aHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZkZUTENvbXBpbGVyVGhy
ZWFkcywgY29tcHV0ZVByaW9yaXR5RGVsdGFPZldvcmtlclRocmVhZHMoLTIsIDApLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZXYXNtQ29tcGlsZXJUaHJl
YWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVByb2ZpbGVyLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIs
IHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApAQCAtNDI4LDYgKzQyOSw5IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlQ29kZUNhY2hlLCB0cnVlLCBO
b3JtYWwsICJJZiBmYWxzZSwgdGhlIHVubGlua2VkIGJ5dGUgY29kZSBjYWNoZSB3aWxsIG5vdCBi
ZSB1c2VkLiIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9y
bWFsLCAiRXhwb3NlIHRoZSBXZWJBc3NlbWJseSBnbG9iYWwgb2JqZWN0LiIpIFwKKyAgICBcCisg
ICAgdihib29sLCBmYWlsVG9Db21waWxlV2ViQXNzZW1ibHlDb2RlLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgbm8gV2FzbTo6UGxhbiB3aWxsIHN1Y2Vzc2Z1bGx5IGNvbXBpbGUgYSBmdW5jdGlv
bi4iKSBcCisgICAgXAogICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhl
IGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmlt
dW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0
IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNt
IG1lbW9yeS4iKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9y
YWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc0YWY2OTE3OWEyYzBhYWY4NWFhYjk4YjFkYWRkMDJjODgzNzgwNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvbWlz
ZURlZmVycmVkVGltZXIuaCIKKworI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCisjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKK1Byb21pc2VEZWZlcnJlZFRpbWVyOjpQcm9taXNlRGVmZXJyZWRUaW1lcihW
TSYgdm0pCisgICAgOiBCYXNlKCZ2bSkKK3sKK30KKwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1l
cjo6ZG9Xb3JrKCkKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrTG9jayk7CisgICAgY2FuY2Vs
VGltZXIoKTsKKyAgICBpZiAoIW1fcnVuVGFza3MpCisgICAgICAgIHJldHVybjsKKworICAgIHdo
aWxlICghbV90YXNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHRp
Y2tldDsKKyAgICAgICAgVGFzayB0YXNrOworICAgICAgICBzdGQ6OnRpZSh0aWNrZXQsIHRhc2sp
ID0gbV90YXNrcy50YWtlTGFzdCgpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRG9p
bmcgd29yayBvbiBwcm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgICAgIC8v
IFdlIG1heSBoYXZlIGFscmVhZHkgY2FuY2VsZWQgdGhlc2UgcHJvbWlzZXMuCisgICAgICAgIGlm
IChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyh0aWNrZXQpKSB7CisgICAgICAgICAgICB0YXNr
KCk7CisgICAgICAgICAgICBtX3ZtLT5kcmFpbk1pY3JvdGFza3MoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gd2FpdGluZ1Rhc2tzID0gbV9ibG9ja2VkVGFza3MudGFrZSh0aWNrZXQpOwor
ICAgICAgICBmb3IgKGNvbnN0IFRhc2smIHVuYmxvY2tlZFRhc2sgOiB3YWl0aW5nVGFza3MpIHsK
KyAgICAgICAgICAgIHVuYmxvY2tlZFRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWlj
cm90YXNrcygpOworICAgICAgICB9CisgICAgfQorCisjaWYgVVNFKENGKQorICAgIGlmIChtX3Bl
bmRpbmdQcm9taXNlcy5pc0VtcHR5KCkgJiYgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxQcm9t
aXNlc0ZpbmlzaCkKKyAgICAgICAgQ0ZSdW5Mb29wU3RvcChtX3J1bkxvb3AuZ2V0KCkpOworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoQ0YpCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpydW5SdW5M
b29wKCkKK3sKKyAgICBBU1NFUlQoIW1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOworICAgIEFTU0VSVChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KTsKKyAgICBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFByb21pc2VzRmluaXNoID0gdHJ1ZTsK
KyAgICBpZiAobV9wZW5kaW5nUHJvbWlzZXMuc2l6ZSgpKQorICAgICAgICBDRlJ1bkxvb3BSdW4o
KTsKK30KKyNlbmRpZgorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjphZGRQZW5kaW5nUHJv
bWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYg
ZGVwZW5kZW5jaWVzKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLnNp
emUoKTsgKytpKQorICAgICAgICBBU1NFUlQoZGVwZW5kZW5jaWVzW2ldLmdldCgpICE9IHRpY2tl
dCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZCh0aWNrZXQsIFZl
Y3RvcjxTdHJvbmc8SlNDZWxsPj4oKSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJBZGRpbmcgbmV3IHBlbmRpbmcgcHJvbWlzZTog
IiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKKyAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJv
bmc8SlNDZWxsPigqbV92bSwgdGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBXVEZNb3ZlKGRlcGVuZGVuY2llcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgZGVwZW5kZW5jaWVzIGZvciBwcm9taXNlOiAiLCBS
YXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZFZlY3RvcihkZXBlbmRlbmNpZXMpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB0aWNr
ZXQtPnByb21pc2VBc3luY1BlbmRpbmcoKTsKKyNlbmRpZgorfQorCitib29sIFByb21pc2VEZWZl
cnJlZFRpbWVyOjpjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCogdGlja2V0
KQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
KyAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1Byb21pc2VzLnJlbW92ZSh0aWNrZXQpOworCisg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkNhbmNlbGluZyBw
cm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworCisgICAgYXV0byBibG9ja2VkVGFza3Mg
PSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRpY2tldCk7CisgICAgZm9yIChjb25zdCBUYXNrJiB0YXNr
IDogYmxvY2tlZFRhc2tzKQorICAgICAgICB0YXNrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBQcm9taXNlRGVmZXJyZWRUaW1lcjo6c2NoZWR1bGVXb3JrU29vbihKU1Byb21pc2VE
ZWZlcnJlZCogdGlja2V0LCBUYXNrJiYgdGFzaykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3Rhc2tMb2NrKTsKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUodGlja2V0LCBX
VEZNb3ZlKHRhc2spKSk7CisgICAgaWYgKCFpc1NjaGVkdWxlZCgpKQorICAgICAgICBzY2hlZHVs
ZVRpbWVyKDApOworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZUJsb2Nr
ZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiBibG9ja2luZ1RpY2tldCwgVGFzayYmIHRhc2spCit7
CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAg
IEFTU0VSVChtX3BlbmRpbmdQcm9taXNlcy5jb250YWlucyhibG9ja2luZ1RpY2tldCkpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9ibG9ja2VkVGFza3MuYWRkKGJsb2NraW5nVGlja2V0LCBWZWN0b3I8
VGFzaz4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZSh0YXNr
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2MzYzMzZWI4
NzJkZTAwN2QzYWYxZmRhOGFlYjA3Zjk1MDQ0NDkzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmgKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNSdW5Mb29wVGltZXIuaCIKKyNpbmNsdWRlICJTdHJv
bmcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTUHJv
bWlzZURlZmVycmVkOworY2xhc3MgVk07CitjbGFzcyBKU0NlbGw7CisKK2NsYXNzIFByb21pc2VE
ZWZlcnJlZFRpbWVyIDogcHVibGljIEpTUnVuTG9vcFRpbWVyIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNSdW5Mb29wVGltZXI7CisKKyAgICBQcm9taXNlRGVmZXJyZWRUaW1lcihWTSYp
OworCisgICAgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkUGVuZGluZ1By
b21pc2UoSlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5k
ZW5jaWVzKTsKKyAgICAvLyBKU1Byb21pc2VEZWZlcnJlZCBzaG91bGQgaGFuZGxlIGNhbmNlbGlu
ZyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAgIGJvb2wgY2Fu
Y2VsUGVuZGluZ1Byb21pc2UoSlNQcm9taXNlRGVmZXJyZWQqKTsKKworICAgIHR5cGVkZWYgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IFRhc2s7CisgICAgdm9pZCBzY2hlZHVsZVdvcmtTb29uKEpTUHJv
bWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAgIC8vIEJsb2NrZWQgdGFza3Mgc2hvdWxkIG9u
bHkgYmUgcmVnaXN0ZXJlZCB3aGlsZSBob2xkaW5nIHRoZSBKUyBBUEkgbG9jay4gSWYgd2UgZGlk
bid0IHJlcXVpcmUgaG9sZGluZyB0aGUKKyAgICAvLyBKUyBBUEkgbG9jayB0aGVuIHRoZXJlIG1p
Z2h0IGJlIGEgcmFjZSB3aGVyZSB0aGUgcHJvbWlzZSB5b3UgYXJlIHdhaXRpbmcgb24gaXMgcnVu
IGJlZm9yZSB5b3VyIHRhc2sgaXMKKyAgICAvLyByZWdpc3RlcmVkLgorICAgIHZvaWQgc2NoZWR1
bGVCbG9ja2VkVGFzayhKU1Byb21pc2VEZWZlcnJlZCosIFRhc2smJik7CisKKyAgICB2b2lkIHN0
b3BSdW5uaW5nVGFza3MoKSB7IG1fcnVuVGFza3MgPSBmYWxzZTsgfQorI2lmIFVTRShDRikKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blJ1bkxvb3AoKTsKKyNlbmRpZgorCitwcml2YXRl
OgorICAgIEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBMb2NrIG1fdGFza0xvY2s7CisgICAgYm9vbCBtX3J1
blRhc2tzIHsgdHJ1ZSB9OworI2lmIFVTRShDRikKKyAgICBib29sIG1fc2hvdWxkU3RvcFJ1bkxv
b3BXaGVuQWxsUHJvbWlzZXNGaW5pc2ggeyBmYWxzZSB9OworI2VuZGlmCisgICAgVmVjdG9yPHN0
ZDo6dHVwbGU8SlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrPj4gbV90YXNrczsKKyAgICBIYXNoTWFw
PEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPFRhc2s+PiBtX2Jsb2NrZWRUYXNrczsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4
IDg1MTE1NDJiNzdkZmM4ZTZmMmJlYWJmMWY4OTNjNzczOWFiNzRiMzguLmZlZTBiMzM5ZWYyNTcy
YTVhZWQxMWRiODZhMTExNGM0NDZhMTliN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQ
cm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgpAQCAtMTAzLDYgKzEwNCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1
ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vh
a0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCkBAIC0xNzcsNiArMTc5
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY2xp
ZW50RGF0YSgwKQogICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxs
RnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQorICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIo
c3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9h
dG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IHd0ZlRocmVhZERhdGEoKS5hdG9t
aWNTdHJpbmdUYWJsZSgpIDogbmV3IEF0b21pY1N0cmluZ1RhYmxlKQogICAgICwgcHJvcGVydHlO
YW1lcyhudWxscHRyKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQpAQCAtMzU2LDYgKzM1
OSwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAKIFZNOjp+
Vk0oKQogeworICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmluZ1Rhc2tzKCk7Cisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChXYXNtOjpleGlzdGluZ1dvcmtsaXN0T3JO
dWxsKCkpCisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yVk0o
KnRoaXMpOworI2VuZGlmCiAgICAgaWYgKFVOTElLRUxZKG1fd2F0Y2hkb2cpKQogICAgICAgICBt
X3dhdGNoZG9nLT53aWxsRGVzdHJveVZNKHRoaXMpOwogICAgIG1fdHJhcHMud2lsbERlc3Ryb3lW
TSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOWQ4NmFhMTlhOTMzY2VhMzhh
YjVmMDIzMTg0NDU5Y2I2MDEwZjNiNy4uODFiODJlOTlhOTRkZWRiM2MzYTFjN2MyNjM2OWY2YmMy
ZjIwOTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDcg
QEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOworY2xhc3MgUHJv
bWlzZURlZmVycmVkVGltZXI7CiBjbGFzcyBSZWdFeHBDYWNoZTsKIGNsYXNzIFJlZ2lzdGVyOwog
Y2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CkBAIC0zODAsNiArMzgxLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6b25jZV9mbGFnIG1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZsYWc7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uPiBtX3dhc21TaWdu
YXR1cmVJbmZvcm1hdGlvbjsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlRGVm
ZXJyZWRUaW1lcj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAgICAgCiAgICAgSlNDZWxsKiBjdXJy
ZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwogICAgIGNvbnN0IENsYXNzSW5mbyogY3Vy
cmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdENsYXNzSW5mbzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKaW5kZXggZmNkYzhjZGRjNGRhNjhkZDlk
Y2UxOTkwZDlkOTkxMmVkZDI5ZDY2OC4uYmZmZThmMzk1YmYwN2M0M2Q1ZGZhZDlmZWU2MWVhM2Mz
Yjk2NGExNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5j
cHAKQEAgLTMzLDEwICszMywxNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
UHJvbWlzZURlZmVycmVkVGltZXIuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCiAKK3VzaW5nIEpTQzo6V2FzbTo6UGxhbjsK
KwogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShKU1dlYkFzc2VtYmx5KTsKQEAgLTQ1LDQ1ICs1MiwxNjAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUq
KTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1
bmMoRXhlY1N0YXRlKik7CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWplY3QoRXhlY1N0YXRl
KiBleGVjLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZSkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OworICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gY2F0Y2hTY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIEpTUHJv
bWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAg
ICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2Ci0gICAgSlNWYWx1ZSBtb2R1
bGUgPSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlN
b2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hT
Y29wZS5leGNlcHRpb24oKSkgewotICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfQor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVz
OworICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9iamVj
dCkpOworICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9t
aXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworCisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9w
dFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2UsIFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHBy
b21pc2UsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAgICBSZWZQdHI8
UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURlZmVy
cmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJvbWlzZSwgZ2xv
YmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1ZhbHVlIG1vZHVsZSA9IEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1i
bHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKHBsYW4pKTsKKyAg
ICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogCi0gICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICAg
ICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGUpOworICAgICAgICB9KTsKKyAgICB9KSk7
CisKKyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQogCitlbnVt
IGNsYXNzIFJlc29sdmUgeyBXaXRoSW5zdGFuY2UsIFdpdGhNb2R1bGVBbmRJbnN0YW5jZSB9Owor
c3RhdGljIHZvaWQgcmVzb2x2ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlv
bih2bSwgZXhlYyk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJlamVj
dChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZW50cmllcyA9PSBSZXNvbHZlOjpXaXRoSW5zdGFuY2UpCisgICAgICAgIHByb21pc2UtPnJl
c29sdmUoZXhlYywgaW5zdGFuY2UpOworICAgIGVsc2UgeworICAgICAgICBKU09iamVjdCogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJtb2R1bGUi
KSksIG1vZHVsZSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJpbnN0YW5jZSIpKSwgaW5zdGFuY2UpOworICAg
ICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgUmVzb2x2ZSBlbnRyaWVzKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWxseSByZWNv
bXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgZ2F0aGVyIGFsbCB0aGUgaW1wb3J0L21lbW9yeSBp
bmZvcm1hdGlvbiBwcmlvciB0byBjb21waWxpbmcgY29kZS4KKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMs
IG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7
CisgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXM6CisgICAgLy8g
MSkgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIGluaXRpYWxpemVkIENvZGVCbG9jaywgc28g
d2UgaGF2ZSBubyBtb3JlIHdvcmsgdG8gZG8uCisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBu
byBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUg
Zm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxp
emVkIENvZGVCbG9jaywgc28gc29tZW9uZSBlbHNlIGlzIGNvbXBpbGluZyBjb2RlIGFuZCB3ZSBq
dXN0IG5lZWQgdG8gd2FpdCBmb3IgdGhlbS4KKworICAgIGlmIChpbnN0YW5jZS0+aW5pdGlhbGl6
ZWQoKSkgeworICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9k
dWxlLCBlbnRyaWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTdHJv
bmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOworICAgIC8vIFRoZSBpbnN0YW5jZSBrZWVwcyB0aGUg
bW9kdWxlIGFsaXZlLgorICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0s
IGluc3RhbmNlKSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9t
aXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBpZiAoaW5zdGFuY2Ut
PmNvZGVCbG9jaygpKSB7CisgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVs
ZUJsb2NrZWRUYXNrKGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cGxhbigpLnBlbmRpbmdQcm9taXNl
KCksIFsmdm0sIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdICgpIHsKKyAgICAg
ICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
ZW50cmllcyk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VS
VCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHJlcGFyc2Vz
IHRoZSBtb2R1bGUgaGVhZGVyLCB3aGljaCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgorICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUtPnNvdXJjZSgpLCBQ
bGFuOjpGdWxsQ29tcGlsZSwgW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdIChQ
bGFuJiBwKSB7CisgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAg
ICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9t
aXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllcywgcGxhbiA9IFdURk1vdmUo
cGxhbildICgpIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKKyAgICAgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1
bGUsIGVudHJpZXMpOworICAgICAgICB9KTsKKyAgICB9KSk7CisKKyAgICBpbnN0YW5jZS0+YWRk
VW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsKKyAgICBwbGFuLT5zZXRN
b2RlQW5kUHJvbWlzZShpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBwcm9taXNlKTsKKyAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2
bSwgZXhlYywgYnVmZmVyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgZGVwZW5k
ZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2JqZWN0KSk7CisgICAgdm0u
cHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUo
ZGVwZW5kZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxh
bih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3NvdXJjZSwgcHJvbWlzZSwgaW1wb3J0
T2JqZWN0LCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsKKyAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZl
cnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtzb3VyY2UsIHByb21pc2UsIGlt
cG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBWTSYgdm0gPSBwbGFuLT52bSgpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBl
eGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUo
c291cmNlKSwgcGxhbi5jb3B5UmVmKCkpOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc3Rh
bnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6
V2l0aE1vZHVsZUFuZEluc3RhbmNlKTsKKyAgICAgICAgfSk7CisgICAgfSkpOworCisgICAgV2Fz
bTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworfQorCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gY2F0Y2hTY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBB
UEkgdHJ1bHkgYXN5bmNocm9ub3VzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MTg3Ci0KICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0g
ICAgYXV0byByZWplY3QgPSBbJl0gKCkgewotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOwotICAg
ICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHByb21pc2UtPnJlamVj
dChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHByb21pc2UtPnByb21pc2UoKSk7Ci0gICAgfTsKLQogICAgIEpTVmFsdWUgaW1wb3J0QXJn
dW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0g
aW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1Vu
ZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpIHsKQEAgLTkzLDI5ICsyMTUsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyhFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgfQogCiAgICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gZXhlYy0+YXJn
dW1lbnQoMCk7Ci0gICAgSlNWYWx1ZSBtb2R1bGU7Ci0gICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNN
b2R1bGUgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RBcmd1bWVudC5pbmhlcml0cyh2bSwgSlNXZWJB
c3NlbWJseU1vZHVsZTo6aW5mbygpKSkgewotICAgICAgICBmaXJzdEFyZ3VtZW50SXNNb2R1bGUg
PSB0cnVlOwotICAgICAgICBtb2R1bGUgPSBmaXJzdEFyZ3VtZW50OwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVs
ZShleGVjLCBmaXJzdEFyZ3VtZW50LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgICAgICBpZiAoY2F0Y2hTY29wZS5leGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoKTsKLSAgICB9Ci0KLSAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
OjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KG1vZHVs
ZSksIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIGlmIChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4gcmVqZWN0KCk7Ci0KLSAgICBpZiAoZmlyc3RBcmd1bWVudElzTW9kdWxl
KQotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwot
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IEFTQ0lJTGl0ZXJhbCgibW9kdWxlIikpLCBtb2R1bGUpOwotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFu
Y2UiKSksIGluc3RhbmNlKTsKLSAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCByZXN1bHQp
OwotICAgIH0KKyAgICBpZiAoYXV0byogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2Vt
Ymx5TW9kdWxlKj4odm0sIGZpcnN0QXJndW1lbnQpKQorICAgICAgICBpbnN0YW50aWF0ZSh2bSwg
ZXhlYywgcHJvbWlzZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhJbnN0YW5j
ZSk7CisgICAgZWxzZQorICAgICAgICBjb21waWxlQW5kSW5zdGFudGlhdGUodm0sIGV4ZWMsIHBy
b21pc2UsIGZpcnN0QXJndW1lbnQsIGltcG9ydE9iamVjdCk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9CkBAIC0xMjksNyArMjMyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRX
YXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBi
eXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXpl
KTsKKyAgICBXYXNtOjpQbGFuIHBsYW4odm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwg
UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKTsKICAgICAvLyBGSVhNRTogV2Ug
bWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRo
YXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IGZlOGMzZjNiYTIw
YTZmZTY4MTVlYjE0NDBhNTdmYmRjMjI5YmZkOWMuLjA4YWJkYmMwMjFiODE4YzM5NTU5NjE2OWEx
Y2RhMjQ1ZGU5OGU1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJQcm9t
aXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIK
ICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtMzksMTQg
KzQwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNs
YXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFBsYW47
Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxsTGlu
a0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiBleGl0U3R1YnMsIFdhc206Ok1l
bW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVy
LCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNtOjpQbGFuPiYmIHBsYW4sIHVuc2lnbmVk
IGNhbGxlZUNvdW50KQogICAgIHsKLSAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlv
blNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIHN0
ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2Fy
ZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxlZUNv
dW50KTsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291
bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdURk1vdmUocGxh
biksIGNhbGxlZUNvdW50KTsKICAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNTksNyArNjQsMTYgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21F
eGl0U3R1YnMuc2l6ZSgpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9CiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLSAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNz
ZW1ibHlNZW1vcnkqKTsKKworICAgIC8vIERvbid0IGNhbGwgaW50aWFsaXplIGRpcmVjdGx5LCB0
aGlzIHNob3VsZCBiZSBjYWxsZWQgZm9yIHlvdSwgYXMgbmVlZGVkLCBieSBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24uCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
Ym9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BsYW47IH0KKworICAgIFdhc206
OlBsYW4mIHBsYW4oKSBjb25zdCB7IEFTU0VSVCghaW5pdGlhbGl6ZWQoKSk7IHJldHVybiAqbV9w
bGFuOyB9CisKKyAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbGl6ZWQo
KSAmJiAhbV9lcnJvck1lc3NhZ2U7IH0KKyAgICBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIHsgQVNT
RVJUKCFydW5uYWJsZSgpKTsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CisgICAgYm9vbCBpc1Nh
ZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CiAKICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CkBAIC04OSwxMCArMTAzLDcgQEAgcHVibGljOgog
ICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRo
aXMsIGNhbGxlZSk7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IG9mZnNldE9mQ2FsbGVlcygpKTsKLSAgICB9CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRP
ZkNhbGxlZXMoKSk7IH0KIAogICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5z
aWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewpAQCAtMTAxLDcgKzExMiw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4mJiwgV2FzbTo6TWVtb3J5TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOworICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgV2FzbTo6TWVt
b3J5TW9kZSwgUmVmPFdhc206OlBsYW4+JiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0xMjUsNiAr
MTM2LDkgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICAvLyBU
aGUgcGxhbiB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUgYmxvY2suCisgICAgUmVmUHRyPFdh
c206OlBsYW4+IG1fcGxhbjsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgV2FzbTo6
TWVtb3J5TW9kZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXgg
ZmFjNTdhZGRhZjA3NGU5YThjZmU2MDYzMzM1ZjMwZGEyZTk2ZDNhMi4uYWI3MjAwZWRkNTMwNGZh
MmFjYmQ0OTlkODA1ZjNkMWQ5NmExNmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAg
IH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYpOworICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3Qp
OwpAQCAtMjIxLDYgKzIyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAg
IFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAg
IFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMjU4LDkgKzI1OSwxMCBAQCBzdGF0aWMg
dm9pZCBzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ss
IFZhbHVlKiBhcmcpCiAgICAgICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1l
bW9yeU1vZGUgbW9kZSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2luZm8oaW5mbykKKyAgICAs
IG1fbW9kZShtb2RlKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC00ODYsNyArNDg4
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWlu
dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1f
bWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSB7CisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAg
QVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0g
MSk7CkBAIC01MjIsNyArNTI0LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2Fk
T3BUeXBlIG9wKQogCiBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChC
Mzo6T3Bjb2RlIG1lbW9yeU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmcpCisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpCiAgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7CiAgICAgcmV0dXJuIG1l
bW9yeU9wOwogfQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dh
c21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW4K
ICAgICBqaXQucmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25D
b250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQs
IHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBt
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWduZWQg
b3B0TGV2ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+
LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0
dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdh
c21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xMjM2LDcgKzEyMzgsNyBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShWTSYgdm0sCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0g
c3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJv
Y2VkdXJlOwotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCBy
ZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKKyAgICBCM0lSR2VuZXJhdG9y
IGNvbnRleHQodm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFy
c2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMp
OwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAyNDlk
NTc4MTRhOTI4YzRiZjkyMDZiYzg1MjU2NGMzNmM3ODg5YTRlLi5kZTU2YTFjM2IyM2M1NzA0ZmUw
NTMxOWJkMGE4NWMzMWU3N2Y5YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAi
QyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENv
bXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRv
V2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21J
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNv
bnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBN
ZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3
YTY3MjlhNzFmYmRmMDUxNzRhMWNjYzExYTU2ZjYyNzFkY2ViYy4uNTU2OTQzNWY0MTJlNjZhNmQ3
NDhjMzM1OGJiZDE1MzUxY2U1MjI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBt
YWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogfQogCiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBJ
ZGVudGlmaWVyIG1vZHVsZTsKLSAgICBJZGVudGlmaWVyIGZpZWxkOworICAgIFN0cmluZyBtb2R1
bGU7CisgICAgU3RyaW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2ln
bmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGlu
ZyBraW5kLgogfTsKIAogc3RydWN0IEV4cG9ydCB7Ci0gICAgSWRlbnRpZmllciBmaWVsZDsKKyAg
ICBTdHJpbmcgZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWduZWQga2lu
ZEluZGV4OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQu
CiB9OwpAQCAtMjYwLDYgKzI2MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAg
fQogCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRl
cm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXgg
ZjJiOTQxMTVjYjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUzN2M3M2JhMi4uZDQyMDU2MGI3MjRlNGI0
NjU1ZDI2YWFjY2M3ZDRjZTIxYWQ0Y2E3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2FscyksICJjYW4ndCBnZXQgRnVu
Y3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGluIGdyb3VwICIsIGkpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKG51bWJlck9mTG9jYWxzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAiLCBpLCAidGggbG9jYWwgZ3JvdXAgY291
bnQgaXMgdG9vIGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSwgImNhbid0IGdldCBGdW5jdGlvbiBs
b2NhbCdzIHR5cGUgaW4gZ3JvdXAgIiwgaSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fY29udGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3Qg
YWRkICIsIG51bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9uIGxvY2FscyBmcm9tIGdyb3VwICIsIGkp
OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwg
bnVtYmVyT2ZMb2NhbHMpKTsKICAgICB9CiAKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlQm9keSgpKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdl
dCBpbmRleCBmb3IgZ2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
Y29udGV4dC5nZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2NhbCBhdCBpbmRl
eCIsIGluZGV4KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5k
ZXgsIHJlc3VsdCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRl
eCksICJjYW4ndCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKLSAg
ICAgICAgcmV0dXJuIG1fY29udGV4dC5zZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIENhbGw6IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCBkMTNkMGM2NjJmOTg5ZDNlZGU0ZTRkZTA5ZjIyNDZj
Yzc5NzY2YTliLi40NGRhMGRmYzE3ODRkZGY1YzAwZDdiYjU5NDYzMDZhZTYwYTJiMjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC00NSw3ICs0NSw3IEBAIGNs
YXNzIFZNOwogbmFtZXNwYWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
b3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6
IHVpbnQ4X3QgewogICAgIEJvdW5kc0NoZWNraW5nLAogICAgIFNpZ25hbGluZywKICAgICBOdW1i
ZXJPZk1lbW9yeU1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCA4YWMwODY2Mjc4YjUxMzkzYjY2OWVhMDlhN2I1
NDhkNmQ5YTc2YjE0Li41OTA5ZmUzZmU4M2MxODgyODkyNTQzNGRlNjU2YWRhYTAxNDE3NzJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdp
c3RlckluZm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0K
IAotTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJl
Y29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5m
b3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1w
b3J0KQogICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkK
ICAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04MiwyOCArODIsNiBAQCBNZW1vcnlJbmZv
cm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdQogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFT
U0VSVCghISp0aGlzKTsKLQotICAgIGlmICghcmVjb21waWxlTW9kZSkgewotICAgICAgICBpZiAo
IWlzSW1wb3J0KSB7Ci0gICAgICAgICAgICBpZiAobWF4aW11bSAmJiBtYXhpbXVtLmJ5dGVzKCkg
PT0gMCkgewotICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0
ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKSk7Ci0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11bSgpLmJ5
dGVzKCkgPT0gMCk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+
bW9kZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhp
bXVtLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwotICAgICAgICAgICAgaWYgKG1fcmVzZXJ2ZWRN
ZW1vcnkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9yeSk7Ci0g
ICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX21v
ZGUgPSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
bW9kZSA9ICpyZWNvbXBpbGVNb2RlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aAppbmRleCA2ZGUwNzBhMTA0NTJmZjZiYjNjNWMyNTA0MTFmMTBlOTEzODllNGEyLi5kMTgyYzcz
Y2Q2NTM4OGNhZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMjIgKzU0LDE3
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5
SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9y
bWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9y
dCk7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsg
fQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0g
ICAgYm9vbCBoYXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1v
cnk7IH0KLSAgICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVCho
YXNSZXNlcnZlZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9
Ci0gICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9v
bCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2YXRl
OgotICAgIFJlZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1f
aW5pdGlhbCB7IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5TW9k
ZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0lt
cG9ydCB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1
ZmQzZTRjM2QuLmU3MzZiYmYyZjE3MzJhZTI4NDg0NGYzNGUyOTk4ODMzY2I4Njg1MjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0x
NjIsMTEgKzE2MiwxMSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0
aWFsUmVzdWx0CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
bW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1
bGUgbmFtZSBsZW5ndGgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVU
RjhTdHJpbmcobW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51
bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4pOwot
ICAgICAgICBpbXAubW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVT
dHJpbmcpOworICAgICAgICBpbXAubW9kdWxlID0gbW9kdWxlU3RyaW5nOwogCiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUg
JyIsIG1vZHVsZVN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4s
ICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIGltcC5maWVsZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBpbXAu
ZmllbGQgPSBmaWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZUV4dGVybmFsS2luZChpbXAua2luZCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3Mga2luZCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBzd2l0Y2ggKGltcC5raW5kKSB7CkBAIC0zMTYsNyAr
MzE2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBv
cnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAg
QVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBh
Z2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0
aW9uKCptX3ZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlz
SW1wb3J0KTsKKyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9u
KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1
cm4geyB9OwogfQogCkBAIC0zNzYsNyArMzc2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
RXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFj
b25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4
cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVu
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVs
ZFN0cmluZyksICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAg
ICAgIGV4cG9ydE5hbWVzLmFkZChmaWVsZFN0cmluZyk7Ci0gICAgICAgIGV4cC5maWVsZCA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBleHAuZmll
bGQgPSBmaWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4
dGVybmFsS2luZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhw
b3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwgImNhbid0IGdldCAi
LCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmgKaW5kZXggYzk2MThiNTdjYTQyMmYwMWZlOWY3OWY0YzE3OTUxYTBlYjZiNzUwZS4uNTBh
Mjg5MzVlZjEzZjk2MjBmYTE1Njg0MTc2YjE3ZTg0ZDY2YzJiYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtNDQsOSArNDQsOSBAQCBzdHJ1
Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJz
ZXI8TW9kdWxlUGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKKworICAgIE1vZHVsZVBhcnNlcihWTSogdm0s
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICAg
ICAgOiBQYXJzZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgICAgICAsIG1f
bW9kZShtb2RlKQogICAgIHsKICAgICB9CiAKQEAgLTY2LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3Qm
LCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1
bHQgbV9yZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtX21vZGUgeyBzdGQ6
Om51bGxvcHQgfTsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGI2NTQyNDkyNjQ4MTBhZmUwOWEx
NzA5OTUwNGY1NjMwYmY4NjVjYzYuLjFlZDJiMmY4NTM2NTlmYTI3MmVkZGUwMTFhOThlYjYwYmM0
OGViOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTQyLDcg
KzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJP
ZkNvcmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9T
eXN0ZW1UcmFjaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAt
NTAsMzAgKzQ5LDY1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi1QbGFuOjpQbGFuKFZNKiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNv
dXJjZS5zaXplKCkpCisKK1BsYW46OlBsYW4oVk0mIHZtLCBBcnJheUJ1ZmZlciYgc291cmNlLCBB
c3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogUGxhbih2bSwgcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlLmRhdGEoKSksIHNvdXJjZS5ieXRlTGVuZ3Ro
KCksIHdvcmssIFdURk1vdmUodGFzaykpCit7Cit9CisKK1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0
b3I8dWludDhfdD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKKyAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCksIHdvcmssIFdU
Rk1vdmUodGFzaykpCiB7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBz
b3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCitQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWlu
dDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQogICAgIDogbV92bSh2bSkKKyAgICAsIG1fY29tcGxldGlvblRhc2so
dGFzaykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJj
ZUxlbmd0aCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCit7Cit9CisKK2NvbnN0IGNoYXIqIFBs
YW46OnN0YXRlU3RyaW5nKFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAg
ICBjYXNlIFN0YXRlOjpJbml0aWFsOiByZXR1cm4gIkluaXRpYWwiOworICAgIGNhc2UgU3RhdGU6
OlZhbGlkYXRlZDogcmV0dXJuICJWYWxpZGF0ZWQiOworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVk
OiByZXR1cm4gIlByZXBhcmVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21waWxlZDogcmV0dXJuICJD
b21waWxlZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxldGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGxh
bjo6bW92ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID4gbV9zdGF0
ZSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIm1vdmluZyB0byBzdGF0ZTogIiwgc3RhdGVT
dHJpbmcoc3RhdGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKG1fc3RhdGUpKTsKKyAg
ICBtX3N0YXRlID0gc3RhdGU7Cit9CisKK3ZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOworICAgIG1f
ZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGNvbXBsZXRlKGxvY2tl
cik7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25p
Y1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBp
bGVUaW1lcygpKQogICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAog
ICAgIHsKLSAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwg
bV9zb3VyY2VMZW5ndGgsIHJlY29tcGlsZU1vZGUpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9k
dWxlUGFyc2VyKCZtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBhdXRv
IHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VS
ZXN1bHQpIHsKLSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3Io
KTsKKyAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3Vs
dC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBA
IC04Miw1MiArMTE2LDQ4IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgfQogCiAgICAgZm9yICh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5n
IGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydCwg
IiBhbmQgZW5kaW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbklu
ZGV4XS5lbmQpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5j
dGlvbiBzdGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25J
bmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbZnVuY3Rpb25JbmRleF0uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25T
dGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRl
eF0uc3RhcnQ7CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGgg
PD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1f
dm0sIHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1Vu
aXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0g
dmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQp
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0
W2ldKSksICIsICIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1
bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVu
Y3Rpb25JbmRleCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAg
ICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJv
cigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbklu
ZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25z
OjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25v
dG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFs
aWRhdGUgbW9kdWxlIik7CisgICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAg
ICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgIGVsc2UKKyAgICAgICAgbW92ZVRv
U3RhdGUoU3RhdGU6OlZhbGlkYXRlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFdlIGFy
ZSBjcmVhdGluZyBhIGJ1bmNoIG9mIHRocmVhZHMgdGhhdCB0b3VjaCB0aGUgbWFpbiB0aHJlYWQn
cyBzdGFjay4gVGhpcyB3aWxsIG1ha2UgQVNBTiB1bmhhcHB5LgotLy8gVGhlIHJlYXNvbiB0aGlz
IGlzIE9LIGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3Qg
Y29udGludWUgdW50aWwgYWxsIHRocmVhZHMKLS8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNr
IGFyZSBkb25lIGV4ZWN1dGluZy4KLVNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUo
KQogewotICAgIGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShyZWNvbXBpbGVNb2RlKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOwor
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAg
VHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJs
eUNvbXBpbGVFbmQpOwogCi0gICAgaWYgKHJlY29tcGlsZU1vZGUpCi0gICAgICAgIEFTU0VSVCht
X21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpID09IHJlY29tcGlsZU1vZGUpOwotCiAg
ICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3Iu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2Nh
dGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1i
ZXIoc2l6ZSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgZmFpbCho
b2xkTG9jayhtX2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDEzMSArMTc4
LDE1MyBAQCB2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGls
ZU1vZGUpCiAgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlv
bikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlv
bkluZGV4ID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAi
LCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0
LT5maWVsZCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9y
dCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgaW1wb3J0LT5t
b2R1bGUsICI6ICIsIGltcG9ydC0+ZmllbGQpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5hdChpbXBvcnQtPmtpbmRJbmRleCk7Ci0gICAgICAgIG1fd2FzbUV4aXRTdHVicy51
bmNoZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IobV92bSwgbV9jYWxsTGlua0luZm9zLCBz
aWduYXR1cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBtX3dhc21FeGl0
U3R1YnMudW5jaGVja2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKCZtX3ZtLCBtX2NhbGxMaW5r
SW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CiAgICAgfQogCi0g
ICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7
Cit9CiAKLSAgICBhdXRvIGRvV29yayA9IFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6
ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZnVuY3Rp
b25JbmRleCA9IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgICsrbV9jdXJyZW50SW5k
ZXg7Ci0gICAgICAgICAgICB9CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBob3JlIGNsYXNzLi4u
IGFuZCB0aGlzIGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xhc3MgUGxhbjo6VGhy
ZWFkQ291bnRIb2xkZXIgeworcHVibGljOgorICAgIFRocmVhZENvdW50SG9sZGVyKFBsYW4mIHBs
YW4pCisgICAgICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJl
YWRzKys7CisgICAgfQogCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5z
dGFydDsKLSAgICAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVu
Z3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0
dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9k
dWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKLQotICAgICAg
ICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3Jt
YXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMp
OwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBN
dWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmls
eSBjaG9vc2UgdGhlIGZpcnN0LgotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9u
IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklYTUUgbWFr
ZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICB+
VGhyZWFkQ291bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9w
bGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwog
Ci0gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJtaW5hdGUgb24gdGhlIG5leHQgZXhlY3V0
aW9uLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
aWYgKCFtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICBtX3BsYW4u
Y29tcGxldGUobG9ja2VyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsK
LSAgICAgICAgfQotICAgIH07CisgICAgUGxhbiYgbV9wbGFuOworfTsKIAotICAgIE1vbm90b25p
Y1RpbWUgc3RhcnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBp
bGVUaW1lcygpKQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK3Zv
aWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucygpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3Rh
dGU6OlByZXBhcmVkKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGls
YXRpb24iKTsKIAotICAgIHVpbnQzMl90IHRocmVhZENvdW50ID0gT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEpJVCgpID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgOiAxOwotICAgIHVpbnQz
Ml90IG51bVdvcmtlclRocmVhZHMgPSB0aHJlYWRDb3VudCAtIDE7Ci0gICAgVmVjdG9yPFRocmVh
ZElkZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtV29y
a2VyVGhyZWFkcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVh
ZHM7IGkrKykKLSAgICAgICAgdGhyZWFkcy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlVGhyZWFkKCJq
c2Mud2FzbS1iMy1jb21waWxhdGlvbi50aHJlYWQiLCBkb1dvcmspKTsKKyAgICBpZiAobV9zdGF0
ZSA+PSBTdGF0ZTo6Q29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBUaHJlYWRDb3VudEhv
bGRlciBob2xkZXIoKnRoaXMpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgKytt
X2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBtX2Z1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUo
U3RhdGU6OkNvbXBpbGVkKTsKKyAgICAgICAgfQogCi0gICAgZG9Xb3JrKCk7IC8vIExldCB0aGUg
bWFpbiB0aHJlYWQgZG8gc29tZSB3b3JrIHRvby4KKyAgICAgICAgY29uc3QgdWludDhfdCogZnVu
Y3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rp
b25JbmRleF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25M
ZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUo
KSArIGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIEFT
U0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRp
Y2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykpOworCisgICAgICAgIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4oKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBp
bGUobV92bSwgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
W2Z1bmN0aW9uSW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJ
bmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgbV9tb2RlKTsKKworICAgICAgICBpZiAo
VU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2Up
IHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVs
dGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAg
ICAgIGZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigp
LCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4
KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9
CiAKLSAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwg
bV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAg
ICAgICAgewotICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21w
aWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWdu
YXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0
dXJlSW5kZXgpLT50b1N0cmluZygpOwordm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFj
dExvY2tlciYpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1f
Y3VycmVudEluZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmICht
X3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnku
c2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklU
LCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5j
dGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAg
IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlw
dGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9u
SW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92
bSwgKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwg
RnVuY3Rpb25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21F
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KG1fdm0sICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9p
bnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CiAKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAg
ICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlw
b2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8
QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+
V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVE
ZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50
Qnlwcm9kdWN0cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KIAotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1l
cygpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkg
LSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxl
IGFuZCBsaW5rIHRoZSBtb2R1bGUiKTsKLSAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNo
IHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAo
YXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxl
QWRkcmVzczsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVk
RnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4g
QjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNo
b3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFk
ZHJlc3MgPSBjYWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRv
SnMKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAg
ICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1f
bW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoY2FsbC5mdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBp
bXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGlu
ZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJF
TEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
NDYyCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQg
PT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAg
ICAgID8gbV93YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkKICAgICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0
U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
Y2FsbC50YXJnZXQgIT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25z
LmF0KGNhbGwuZnVuY3Rpb25JbmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50
cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0
ICE9IFVubGlua2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAg
ICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2Fs
bC5mdW5jdGlvbkluZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9mYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBT
dGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQp
OworICAgICAgICBtX2NvbXBsZXRpb25UYXNrKCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQu
bm90aWZ5QWxsKCk7CisgICAgfQogfQogCi12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwg
SlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2
b2lkIFBsYW46OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVu
Y3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQot
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9u
LT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50
Q2FsbGVlKTsKLQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdU
Rk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVu
dHJ5cG9pbnRDYWxsZWUpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYg
KG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhhdmUgYSB3YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRo
ZSBsb2NrIHRvIGNvbXBsZXRlIC8gZmFpbC4KKyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xv
Y2spOworICAgIH0KK30KIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgs
IGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpj
YW5jZWwoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3Rh
dGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBl
cnJvciBtZXNzYWdlIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAg
ICAgfQogfQogCisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5
MDkzZWY2YmE4MTg0ZTQ1YzRmZTAwNzY2MmY0Li45ZGIxNGVhNjk1OWE1NzYyYThjMzljODNmMjdk
YmY4OTVjMjM0YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEg
KzQwLDk2IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNl
RGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFu
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZv
aWQgZG9udEZpbmFsaXplKFBsYW4mKSB7IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9p
ZChQbGFuJik+IENvbXBsZXRpb25UYXNrOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7
IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sg
c2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3
aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihW
TSYsIFZlY3Rvcjx1aW50OF90PiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsK
IAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9k
ZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgp
OworICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9p
ZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4p
OwotCi0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4g
bV9mYWlsZWQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vy
cm9yTWVzc2FnZTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBv
cnQ+JiBleHBvcnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWls
ZWQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsK
ICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAg
ICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnMuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhh
c1dvcmsoKSk7CisgICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXpl
KCk7CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRh
a2VNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFp
bGVkKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7
CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAog
ICAgIEJhZzxDYWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZh
aWxlZCgpICYmICFoYXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5r
SW5mb3MpOwogICAgIH0KIAogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhp
dFN0dWJzKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0
dXJuIFdURk1vdmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9
CisgICAgdm9pZCBzZXRNb2RlQW5kUHJvbWlzZShNZW1vcnlNb2RlIG1vZGUsIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlKQorICAgIHsKKyAgICAgICAgbV9tb2RlID0gbW9kZTsKKyAgICAgICAg
bV9wZW5kaW5nUHJvbWlzZSA9IHByb21pc2U7CisgICAgfQorICAgIE1lbW9yeU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEpTUHJvbWlzZURlZmVycmVkKiBwZW5kaW5n
UHJvbWlzZSgpIHsgcmV0dXJuIG1fcGVuZGluZ1Byb21pc2U7IH0KKyAgICBWTSYgdm0oKSBjb25z
dCB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7Cisg
ICAgICAgIEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQsCisg
ICAgICAgIENvbXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92
ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKworICAg
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3Nh
Z2U7IH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0
dXJuICFlcnJvck1lc3NhZ2UoKS5pc051bGwoKTsgfQorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhhc0JlZW5Q
cmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9CisK
KyAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJp
dmF0ZToKKyAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhy
ZWFkQ291bnRIb2xkZXI7CisKKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jik7CisKKyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAgICB2b2lkIGZhaWwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworCisgICAgY29uc3QgY2hh
ciogc3RhdGVTdHJpbmcoU3RhdGUpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9y
bWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1
cmVJbmRleD4gbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
czsKQEAgLTEwMywxNiArMTM4LDI0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAg
IFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAg
IFZNKiBtX3ZtOworICAgIFZNJiBtX3ZtOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3BlbmRp
bmdQcm9taXNlIHsgbnVsbHB0ciB9OworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRh
c2s7CisKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNv
bnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9Owog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsK
KyAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAg
ICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6SW5pdGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29y
azsKKyAgICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQz
Ml90IG1fY3VycmVudEluZGV4IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFk
YzYzMmVhOTIzNTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5o
IgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVD
YWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkp
OworICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxG
dW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFs
RnVuY3Rpb25JbmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24g
PSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwor
CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2Vi
QXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVu
dHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0
aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKwor
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2Vi
QXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlw
b2ludCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24t
Pndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAg
ICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2Fz
bUVudHJ5cG9pbnRDYWxsZWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IDc1ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMz
NzRmY2FlNjU0NjEyMTQuLjkyMzg1OTRiYTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMjcx
LDcgKzI3MSw3IEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBl
JiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByCiAgICAgICAgIGlmICh0YXJnZXQu
c2lnbmF0dXJlKCkgPT0gVm9pZCkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiYnJhbmNo
IHRvIGJsb2NrIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCB0YXJnZXQudHlwZSgpID09
IEJsb2NrVHlwZTo6VG9wTGV2ZWwgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNo
IHRvIGJsb2NrIiwgIiBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwg
dGFyZ2V0LnNpZ25hdHVyZSgpKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJn
ZXQuc2lnbmF0dXJlKCkgIT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNr
IHR5cGUgZG9lc24ndCBtYXRjaCBibG9jaydzIHR5cGUiKTsKIAogICAgICAgICByZXR1cm4geyB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmRlZDYwMDkxNzU3YTBiZjA0NWIzYTNlZjFiOTYyM2M4MjE3NTdmNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAs
MCArMSwyNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworI2luY2x1ZGUgPHd0
Zi9OdW1iZXJPZkNvcmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgY2hhciogV29ya2xp
c3Q6OnByaW9yaXR5U3RyaW5nKFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJp
b3JpdHkpIHsKKyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlvbjogcmV0dXJuICJQcmVwYXJh
dGlvbiI7CisgICAgY2FzZSBQcmlvcml0eTo6U2h1dGRvd246IHJldHVybiAiU2h1dGRvd24iOwor
ICAgIGNhc2UgUHJpb3JpdHk6OkNvbXBpbGF0aW9uOiByZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAg
ICBjYXNlIFByaW9yaXR5OjpTeW5jaHJvbm91czogcmV0dXJuICJTeW5jaHJvbm91cyI7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0
OjpUaHJlYWQgZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gQXV0b21hdGljVGhyZWFkOworICAgIFRocmVhZChjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29yaykKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgd29y
ay5tX2xvY2ssIHdvcmsubV9wbGFuRW5xdWV1ZWQpCisgICAgICAgICwgd29ya2xpc3Qod29yaykK
KyAgICB7CisKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNv
bXBpbGF0aW9uUGxhbihjb25zdCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBhdXRv
JiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0g
ZWxlbWVudC5wbGFuKQorICAgICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgUG9s
bFJlc3VsdCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisgICAgICAgIHN5bmNo
cm9uaXplLm5vdGlmeUFsbCgpOworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgewor
CisgICAgICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5Owor
ICAgICAgICAgICAgaWYgKHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24p
CisgICAgICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAg
IGVsZW1lbnQgPSBxdWV1ZS50b3AoKTsKKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBz
aG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxh
bi0+aGFzQmVlblByZXBhcmVkKCkpCisgICAgICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAg
ICAgICAgICAgIGlmIChlbGVtZW50LnBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBh
IGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2Vl
IGlmIHRoZXJlIGFyZSBvdGhlciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNv
bXBpbGF0aW9uUGxhbihsb2NrZXIpOworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVu
dCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0K
KworICAgIFdvcmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNv
bXBsZXRlID0gWyZdICgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsK
KyAgICAgICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBQbGFuKiBwbGFuID0gZWxlbWVudC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQo
cGxhbik7CisgICAgICAgIGlmICghcGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAg
ICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxh
bi0+aGFzV29yaygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBwbGFuLT5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0
UHJpb3JpdHkoKTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsK
KyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBz
b21lIG9jY2FzaW9uYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5
IGUuZy4gc3luY2hyb25vdXMsIHBsYW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBs
YW4tPmNvbXBpbGVGdW5jdGlvbnMoKTsKKyAgICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkp
OworICAgICAgICBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmts
aXN0Lm1fbG9jaykpOworICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1Ymxp
YzoKKyAgICBDb25kaXRpb24gc3luY2hyb25pemU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0Owor
ICAgIC8vIFdlIGNhbiBvbmx5IG1vZGlmeSBlbGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4g
QSBzeW5jaHJvbm91cyBjb21waWxlIG1pZ2h0IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBp
biBvcmRlciB0byBib29zdCB0aGUgcHJpb3JpdHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7
Cit9OworCit2b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7Cisg
ICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgor
ICAgICAgICBwcmlvcml0eSA9IFByaW9yaXR5OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK2VudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFr
LCBEcm9wQW5kQ29udGludWUsIENvbnRpbnVlIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYgZnVuYykKK3sKKyAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhh
dmUgYW4gaXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3Ms
IHRoaXMgZnVuY3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5k
IHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZl
IG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1CisgICAgc3RkOjp2ZWN0b3I8
UXVldWVFbGVtZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgewor
ICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgIG1f
cXVldWUucG9wKCk7CisgICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50
KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykg
eworICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6
OkNvbnRpbnVlKQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAg
ICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVt
ZW50cykKKyAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworfQorCit2b2lkIFdvcmtsaXN0
OjplbnF1ZXVlKFJlZjxQbGFuPiBwbGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgaXRlcmF0ZShsb2Nr
ZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGVsZW1lbnQsIGVsZW1lbnQucGxhbi5nZXQoKSAhPSAmcGxhbi5nZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6Q29udGludWU7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBwcm9taXNlIGl0IG11c3QgYmUgc3luY2hyb25v
dXMgc28gd2Ugc2hvdWxkIGJvb3N0IHRoZSBwcmlvcml0eS4KKyAgICBQcmlvcml0eSBwcmlvcml0
eSA9IHBsYW4tPnBlbmRpbmdQcm9taXNlKCkgPyBQcmlvcml0eTo6UHJlcGFyYXRpb24gOiBQcmlv
cml0eTo6U3luY2hyb25vdXM7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkVucXVldWluZyBw
bGFuIHdpdGggcHJpb3JpdHk6ICIsIHByaW9yaXR5U3RyaW5nKHByaW9yaXR5KSk7CisgICAgbV9x
dWV1ZS5wdXNoKHsgcHJpb3JpdHksIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7Cisg
ICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOworfQorCit2b2lkIFdvcmtsaXN0
Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCit7CisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsm
XSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5wbGFu
ID09ICZwbGFuKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5
OjpTeW5jaHJvbm91czsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6VXBk
YXRlQW5kQnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJl
c3VsdDo6Q29udGludWU7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoYXV0byYgdGhyZWFk
IDogbV90aHJlYWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50LnBsYW4gPT0g
JnBsYW4pCisgICAgICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnByaW9yaXR5ID0gUHJpb3Jp
dHk6OlN5bmNocm9ub3VzOworICAgICAgICB9CisgICAgfQorCisgICAgcGxhbi53YWl0Rm9yQ29t
cGxldGlvbigpOworfQorCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0p
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgaXRlcmF0ZShsb2NrZXIs
IFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGlmICgmZWxlbWVudC5wbGFu
LT52bSgpID09ICZ2bSkgeworICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKKyAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0pOworCisg
ICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+
ZWxlbWVudC5wbGFuICYmICZ0aHJlYWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAg
ICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5n
IHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBh
bmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgdGhyZWFkLT5lbGVt
ZW50LnBsYW4tPmNhbmNlbCgpOworICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0
KCptX2xvY2spOworICAgICAgICB9CisgICAgfQorfQorCitXb3JrbGlzdDo6V29ya2xpc3QoKQor
ICAgIDogbV9sb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChB
dXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQoreworICAgIHVuc2lnbmVkIG51bWJl
ck9mQ29tcGlsYXRpb25UaHJlYWRzID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RG
OjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgOiAxOworICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2Fw
YWNpdHkobnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX2xvY2spOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0
aW9uVGhyZWFkczsgaSsrKQorICAgICAgICBtX3RocmVhZHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6
bWFrZV91bmlxdWU8V29ya2xpc3Q6OlRocmVhZD4obG9ja2VyLCAqdGhpcykpOworfQorCitXb3Jr
bGlzdDo6fldvcmtsaXN0KCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOworICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRU
aWNrZXQoKSwgbnVsbHB0ciB9KTsKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChs
b2NrZXIpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX3RocmVhZHNbaV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdv
cmtsaXN0KiBnbG9iYWxXb3JrbGlzdDsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51
bGwoKSB7IHJldHVybiBnbG9iYWxXb3JrbGlzdDsgfQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0
KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVXb3JrbGlzdCwgW10geworICAgICAgICBnbG9iYWxX
b3JrbGlzdCA9IG5ldyBXb3JrbGlzdCgpOworICAgIH0pOworICAgIHJldHVybiAqZ2xvYmFsV29y
a2xpc3Q7Cit9CisKKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zOWMwNzM1YmMyYTE2ZmMyMzZmODE1NzBmMjhlODU5YTVjY2NlNDUw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmts
aXN0LmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIlZNLmgiCisKKyNpbmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRv
bWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFz
cyBQbGFuOworCitjbGFzcyBXb3JrbGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgV29ya2xpc3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5xdWV1ZShSZWY8UGxhbj4pOworICAgIHZvaWQgc3RvcEFsbFBs
YW5zRm9yVk0oVk0mKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFu
U3luY2hyb25vdXNseShQbGFuJik7CisKKyAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VE
ZWZlcnJlZCosIFBsYW4qKTsKKyAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJl
ZCosIFBsYW4qKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNs
YXNzIFRocmVhZDsKKworICAgIHR5cGVkZWYgdWludDY0X3QgVGlja2V0OworICAgIFRpY2tldCBu
ZXh0VGlja2V0KCkgeyByZXR1cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBlbnVt
IGNsYXNzIFByaW9yaXR5IHsKKyAgICAgICAgU2h1dGRvd24sCisgICAgICAgIFN5bmNocm9ub3Vz
LAorICAgICAgICBDb21waWxhdGlvbiwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworICAg
IGNvbnN0IGNoYXIqIHByaW9yaXR5U3RyaW5nKFByaW9yaXR5KTsKKworICAgIHN0cnVjdCBRdWV1
ZUVsZW1lbnQgeworICAgICAgICBQcmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRp
Y2tldDsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW47CisKKyAgICAgICAgdm9pZCBuZXh0UHJp
b3JpdHkoKTsKKyAgICB9OworCisgICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBib29s
IG9wZXJhdG9yKCkoY29uc3QgUXVldWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQm
IHJpZ2h0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9
PSByaWdodC5wcmlvcml0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC50aWNrZXQgPiBy
aWdodC50aWNrZXQ7CisgICAgICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnBy
aW9yaXR5OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBpdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3Rv
ciYpOworCisgICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFk
Q29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKKyAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3Vs
ZCBvdmVyZmxvdyBidXQgdGhhdCdzIHVubGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBq
dXN0IGNvbXBpbGUgdGhpbmdzIG9mIHRoZSBzYW1lCisgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdy
b25nIG9yZGVyLCB3aGljaCBpc24ndCB3cm9uZywganVzdCBzdWJvcHRpbWFsLgorICAgIFRpY2tl
dCBtX2xhc3RHcmFudGVkVGlja2V0IHsgMCB9OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1
c2UgV1RGOjpWZWN0b3IgYnV0IFdURjo6VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFj
Y2VzcyBpdGVyYXRvci4KKyAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3Rk
Ojp2ZWN0b3I8UXVldWVFbGVtZW50PiwgQ29tcGFyYXRvcj4gbV9xdWV1ZTsKKyAgICBIYXNoTWFw
PEpTUHJvbWlzZURlZmVycmVkKiwgUGxhbio+IG1fYWN0aXZlUGxhbnM7CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+PiBtX3RocmVhZHM7Cit9OworCitXb3JrbGlzdCogZXhpc3Rp
bmdXb3JrbGlzdE9yTnVsbCgpOworSlNfRVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZVdv
cmtsaXN0KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q2FsbGVlLmgKaW5kZXggYjg3NzdkYTBkNGQ3YTEzMGY0MjI0ZWQ0NWZjY2My
ZDE5YzFmMjdjNi4uYThhM2RjYTNkMDlmNWRkMzlkYTZiOWE4Zjk5NWRjODUwODk4N2FjNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxs
ZWUuaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnM7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2Fz
bTo6RW50cnlwb2ludCYmKTsKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQm
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwogCiAg
ICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRl
eCBmZjg3MTE2ODE5YTMyMjQzOWU4MWNiZDA0NjQ3MmEyNmYyMTgzZDhiLi5lYjk2MDczYjY5OThi
MDJhMjA3NGFiMTVkZjc3NDY3NjJkNmZiNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMjksMzEg
KzI5LDY3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2lu
Y2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xh
c3NJbmZvIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29k
ZUJsb2NrIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKSB9OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+
JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRT
dHVicywgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBvd25lciwgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBs
YW4+JiYgcGxhbiwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJB
c3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhX
VEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2Fz
bUV4aXRTdHVicykpCisgICAgLCBtX3BsYW4oV1RGTW92ZShwbGFuKSkKICAgICAsIG1fbW9kZSht
b2RlKQogICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5z
ZXQodm0sIHRoaXMsIG93bmVyKTsKKyAgICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxvY2sobW9k
ZSkpOworICAgIG1vZHVsZSgpLT5tX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCB0aGlzKTsKKwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2Fs
bGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIp
OwogfQogCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQoreworICAg
IGlmIChpbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBwbGFu
KCkudm0oKTsKKyAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIXBsYW4oKS5oYXNXb3JrKCkpOworCisgICAgaWYgKHBsYW4o
KS5mYWlsZWQoKSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBsYW4oKS5lcnJvck1lc3Nh
Z2UoKTsKKyAgICAgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4oKS5tb2RlKCkgPT0gbW9kZSgpKTsKKyAgICBBU1NF
UlQocGxhbigpLmludGVybmFsRnVuY3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworCisg
ICAgbV9jYWxsTGlua0luZm9zID0gcGxhbigpLnRha2VDYWxsTGlua0luZm9zKCk7CisgICAgbV93
YXNtRXhpdFN0dWJzID0gcGxhbigpLnRha2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuKCku
aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJs
eUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50
cnlwb2ludENhbGxlZSkgeworICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxl
ZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENh
bGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9KTsKKwor
ICAgIG1fcGxhbiA9IG51bGxwdHI7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaygpOwogfQogCi1ib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVu
KEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAg
IGlmICghcnVubmFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2FzbTo6TWVt
b3J5TW9kZSBjb2RlTW9kZSA9IG1vZGUoKTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1v
ZGUgPSBtZW1vcnktPm1lbW9yeSgpLm1vZGUoKTsKICAgICBzd2l0Y2ggKGNvZGVNb2RlKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVs
cGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBl
cnMuaAppbmRleCBmMDMzMTBlYTVlMjA2MDY1NDFkNThlNzI2NGIxODVlNDNkNjkzM2Q0Li41Nzhh
NjlmNDk4MTVhODI1MjNjMTEyOTQ4ZmJkOGVhMDkwMzVmMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTczLDYg
KzczLDIyIEBAIEFMV0FZU19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVmZmVy
VmlldyA/IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQog
CitBTFdBWVNfSU5MSU5FIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVyRnJv
bVZhbHVlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHNpemVfdCBieXRl
T2Zmc2V0OworICAgIHNpemVfdCBieXRlU2l6ZTsKKyAgICB1aW50OF90KiBkYXRhID0gZ2V0V2Fz
bUJ1ZmZlckZyb21WYWx1ZShleGVjLCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGJ1
ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXpl
KTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyOworCisgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlGdW5j
dGlvbiomIHdhc21GdW5jdGlvbiwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNtV3Jh
cHBlckZ1bmN0aW9uKQogewogICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjppbmZvKCkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCAxYzExYjBjYTY1YzkxNzQy
ZjhlNDgxM2MyNGQ5NzVmNjVlZWJhYTE4Li41YmM5ODA5MWIwZWQwMDY5Yjg0ODY3ZWEyNmEyMmZl
YmM4OTk1ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTMyLDMxICszMiwxNiBAQAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVs
cGVycy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnNldE1lbW9yeShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1lbW9y
eSogbWVtb3J5KQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAvLyBXZSBjcmVhdGUgc3R1YiBtZW1vcmllcyBldmVuIGZvciBtb2R1bGVzIHRoYXQgc2hv
dWxkIGV2ZW50dWFsbHkgZ2V0IGEgbWVtb3J5IHNvIHdlIHdhbnQgdG8gYXZvaWQgcmVjb21wbGlu
ZyB0aGVyZS4KLSAgICBpZiAobWVtb3J5LT5tZW1vcnkoKSkgewotICAgICAgICBhdXRvIGNvZGVC
bG9jayA9IG1fY29kZUJsb2NrLT5tb2R1bGUoKS0+Y29kZUJsb2NrKHZtLCBleGVjLCBtZW1vcnkp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCk7Ci0gICAgICAgIG1fY29kZUJs
b2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgbV9tZW1vcnkuc2V0KHZt
LCB0aGlzLCBtZW1vcnkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVz
cGFjZU9iamVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0
dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZt
LmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2
bSwgc3RydWN0dXJlLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzLnNpemUoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZt
LCBtb2R1bGUsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwot
fQorY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2Vi
QXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkgfTsKIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogewpAQCAtNzUsMTEgKzYwLDExIEBAIHZvaWQgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIG1vZHVsZSwKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKHZtLCBpbmZvKCkpKTsKIAorICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxl
KTsKICAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1vcnlTaXplID0gbW9kdWxlLT5tb2R1bGVJbmZv
cm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICBtX2dsb2Jh
bHMgPSBNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBo
ZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKLSAg
ICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIG1vZHVsZS0+Y29kZUJsb2NrKCkpOwogICAgIG1f
bW9kdWxlTmFtZXNwYWNlT2JqZWN0LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0
KTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0
cyIpLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIE5vbmUpOwogfQpAQCAtOTUsMTYgKzgwLDI3NyBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlv
bnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoKnRoaXNPYmplY3QtPmltcG9ydEZ1bmN0
aW9uKGkpKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rp
b25zKClbaV0pOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWRkVW5pdGlhbGl6
ZWRDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6UGxhbj4gcGxhbikKK3sKKyAgICBhdXRvKiBj
b2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIG1vZHVsZSgpLCBt
ZW1vcnlNb2RlKCksIFdURk1vdmUocGxhbiksIG1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigp
LmludGVybmFsRnVuY3Rpb25Db3VudCgpKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMs
IGNvZGVCbG9jayk7CisgICAgQVNTRVJUKCFjb2RlQmxvY2stPmluaXRpYWxpemVkKCkpOworfQor
Cit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgY29kZUJsb2NrKCktPmluaXRpYWxpemUoKTsKKworICAgIGlmICghY29kZUJsb2Nr
KCktPnJ1bm5hYmxlKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCksIGNvZGVCbG9jaygpLT5lcnJvck1lc3NhZ2Uo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9j
aygpLT5pc1NhZmVUb1J1bihtZW1vcnkoKSkpOworCisgICAgYXV0byogbW9kdWxlUmVjb3JkID0g
anNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3Qt
Pm1vZHVsZVJlY29yZCgpKTsKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCks
IHRoaXMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBK
U1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Cit9CisKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3Ry
dWN0dXJlKQoreworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
KworICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9
IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworCisgICAgYXV0byBleGNlcHRpb24gPSBb
Jl0gKEpTT2JqZWN0KiBlcnJvcikgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBlcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH07CisKKyAgICAv
LyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5cGUoaW1w
b3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisgICAgaWYg
KG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCisgICAg
ICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
Y2FuJ3QgbWFrZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBiZWNhdXNlIHRoZXJlIGlzIG5vIGltcG9y
dHMgT2JqZWN0IGFuZCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxlIHJlcXVpcmVzIGltcG9ydHMiKSkp
OworCisgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZh
dGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7
CisgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2UgPSBtb2R1bGVSZWNvcmQtPmdldE1v
ZHVsZU5hbWVzcGFjZShleGVjKTsKKyAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBi
ZSBwcmV0dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCisgICAgYXV0byog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0
aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJl
LCBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpOworICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgIC8vIExldCBmdW5j
cywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2FsbGFi
bGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQgV2Vi
QXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgorICAgIC8vIExldCBpbXBvcnRz
IGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4dGVybmFsIHZhbHVlcy4KKyAgICB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOworICAgIHVuc2lnbmVkIG51bUltcG9ydEdsb2Jh
bHMgPSAwOworCisgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKKyAgICBib29sIGhh
c1RhYmxlSW1wb3J0ID0gZmFsc2U7CisgICAgLy8gRm9yIGVhY2ggaW1wb3J0IGkgaW4gbW9kdWxl
LmltcG9ydHM6CisgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5pbXBv
cnRzKSB7CisgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVy
Zm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1lKS4KKyAgICAgICAgSlNWYWx1
ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBpbXBvcnQubW9kdWxlKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgICAgIC8vIDIuIElmIFR5cGUobykgaXMg
bm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghaW1wb3J0TW9kdWxl
VmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0IiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1
ZSkpKTsKKworICAgICAgICAvLyAzLiBMZXQgdiBiZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBH
ZXQobywgaS5pdGVtX25hbWUpCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgaW1wb3J0LmZpZWxkKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAg
ICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5jdGlvbiBp
bXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNlLCB0aHJv
dyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5j
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVz
dCBiZSBjYWxsYWJsZSIpKSk7CisKKyAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpz
Q2FzdDxKU09iamVjdCo+KHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4
cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiB3YXNtRnVuY3Rpb247CisgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKKyAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5
SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0
aW9uKSkgeworICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2Vz
IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgorICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0
dXJlSW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAgICAg
ICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW1w
b3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJl
XV0uCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+
ZnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKKyAgICAgICAg
ICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUlu
ZGV4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24n
cyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rp
b24ncyBzaWduYXR1cmUiKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gaWlpLiBP
dGhlcndpc2U6CisgICAgICAgICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1
bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBX
ZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1
ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFz
c2VtYmx5VmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlOiBkb25lIGFzIHBhcnQgb2YgUGxhbiBj
b21waWxhdGlvbi4KKyAgICAgICAgICAgIC8vIGl2LiBBcHBlbmQgdiB0byBmdW5jcy4KKyAgICAg
ICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1
bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5z
dGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgor
CisgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5k
ZXgpOworICAgICAgICAgICAgaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9ucygpW251bUltcG9ydEZ1
bmN0aW9ucysrXS5zZXQodm0sIGluc3RhbmNlLCBmdW5jdGlvbik7CisgICAgICAgICAgICAvLyB2
LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghaGFzVGFibGVJbXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFy
YW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgorICAgICAgICAgICAgLy8gNy4gT3RoZXJ3
aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKKyAgICAgICAgICAgIGhhc1RhYmxlSW1wb3J0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWND
YXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAvLyBpLiBJ
ZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJs
eS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5
LlRhYmxlIikpKTsKKworICAgICAgICAgICAgdWludDMyX3QgZXhwZWN0ZWRJbml0aWFsID0gbW9k
dWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCk7CisgICAgICAgICAgICB1
aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChh
Y3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxs
IikpKTsKKworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVk
TWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKSB7
CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9
IHRhYmxlLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhh
dmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsK
KyAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11
bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCisg
ICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgorICAgICAg
ICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
Ok1lbW9yeTogeworICAgICAgICAgICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhpcyBzaG91
bGQgYmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSk7CisgICAgICAgICAgICBoYXNN
ZW1vcnlJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKKyAg
ICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwg
dGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICBpZiAoIW1lbW9yeSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKKworICAgICAgICAgICAgV2FzbTo6UGFn
ZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFs
KCk7CisgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+
bWVtb3J5KCkuaW5pdGlhbCgpOworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBl
Y3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQg
cHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKworICAgICAgICAg
ICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkubWF4aW11bSgpKSB7CisgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFj
dHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLm1heGltdW0oKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1
aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworCisgICAgICAgICAgICAgICAgaWYgKGFjdHVhbE1heGlt
dW0gPiBleHBlY3RlZE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVj
dGVkICdtYXhpbXVtJyIpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGlpLiBB
cHBlbmQgdiB0byBtZW1vcmllcy4KKyAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1v
cnldXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNTRVJUKCFpbnN0YW5jZS0+bV9tZW1vcnkp
OworICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIG1lbW9y
eSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBp
bXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBpbW11dGFibGUgZ2xvYmFs
LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgIEFTU0VSVChtb2R1bGVJbmZvcm1hdGlv
bi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJ
bW11dGFibGUpOworICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9iYWxfdHlwZSBvZiBpIGlz
IGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgorICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0Lmtp
bmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
ImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKKyAgICAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQg
Z2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOworICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQg
VG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCisgICAgICAgICAgICBBU1NFUlQobnVt
SW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAo
bW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xv
YmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgICAg
ICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVp
bnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0
R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5h
c051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAg
ICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGhh
dmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24u
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBvcnQpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1w
b3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4g
aXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9y
eT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAg
ICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKworICAgICAgICAgICAgaW5zdGFuY2UtPm1f
bWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkg
eworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9y
IHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISFtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0
J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0
YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAg
ICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxl
SW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxl
IHdlJ3ZlIGRlZmluZWQuCisgICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9v
IGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAg
ICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VS
VCh0YWJsZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNl
LCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFpbnN0YW5jZS0+bWVt
b3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNv
IHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1l
bW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KKyAgICAgICAgaW5zdGFu
Y2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVj
dHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisgICAgfQorICAgIAor
ICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09
IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOworICAgICAgICBmb3IgKHNp
emVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxl
SW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKKyAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5k
ZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2Fz
bTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0
aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRH
bG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4
LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJl
cikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEds
b2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOworICAg
IGluc3RhbmNlLT5tX2NvZGVCbG9jay5zZXRNYXlCZU51bGwodm0sIGluc3RhbmNlLCBqc01vZHVs
ZS0+Y29kZUJsb2NrKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpKTsKKworICAgIHJldHVybiBpbnN0
YW5jZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZv
ID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgKaW5kZXggZTIyODQ5Njk2NzIwNWEzMTM2Yzg4M2JiZGUzMjZhZGJjNzExMTMw
ZC4uZWM5YmM4ZTgxNDA3MmI3ZWUyNWU5MmI5YjQ5ZTEwODQ2YWJmZDVkZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgK
QEAgLTM4LDUxICszOCwzNCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIAorbmFtZXNwYWNlIFdhc20g
eworY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVj
dGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRl
KFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAK
LSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5tb2R1bGUo
KTsKLSAgICB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KKyAgICBib29sIGluaXRpYWxpemVkKCkgY29u
c3QgeyByZXR1cm4gY29kZUJsb2NrKCkgJiYgY29kZUJsb2NrKCktPmluaXRpYWxpemVkKCk7IH0K
KyAgICB2b2lkIGFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKFZNJiwgUmVmPFdhc206OlBsYW4+KTsK
KyAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqKTsKIAotICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7Ci0gICAg
fQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
dWxlLmdldCgpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlv
bih1bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251
bUltcG9ydEZ1bmN0aW9ucyk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0RnVuY3Rpb25zKClbaWR4
XTsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25z
KCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVj
dCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIGltcG9ydEZ1bmN0aW9uKGlk
eCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwotICAgIH0KKyAgICBKU09iamVjdCogaW1wb3J0RnVu
Y3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVu
Y3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygpW2lkeF0uZ2V0KCk7IH0KIAogICAgIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0g
ICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBpbGUuCi0gICAgdm9pZCBz
ZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CisgICAgdm9p
ZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQo
IW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KICAgICBXYXNtOjpN
ZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgp
OyB9CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5n
ZXQoKTsgfQotICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KIAogICAgIGludDMyX3QgbG9h
ZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07
IH0KICAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC05MCwxMSArNzMsNiBAQCBwdWJsaWM6CiAgICAgZG91
YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0
PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KICAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25l
ZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQogCi0gICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxKU0NlbGw+KSAqIGlkeDsKLSAgICB9Ci0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90YWJsZSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KQEAgLTExMyw2
ICs5MSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRl
QmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJ
bXBvcnRGdW5jdGlvbnMoKSk7IH0KKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9k
dWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4g
bV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBt
X21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1l
bW9yeT4gbV9tZW1vcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGY0MTQ2N2Y0ZmFhZTlkYWEwODE2NzRlN2Yy
MDU3OGQ0YzVlYjZmM2MuLmEyY2QzNDYxMmE2YjllNGIyYzlkMjExZWZkODQwOWEwNDY4MDVkNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCkBAIC00MiwzNSArNDIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0
IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5N
b2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2Vi
QXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQ
bGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUpCitKU1dlYkFz
c2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYm
IHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikKIHsKKyAgICBBU1NFUlQoIXBsYW4t
Pmhhc1dvcmsoKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBpcyB0aHJv
d24uCi0gICAgcGxhbi5ydW4obW9kZSk7Ci0gICAgaWYgKHBsYW4uZmFpbGVkKCkpIHsKLSAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IoZXhlYywgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkpKTsKKyAgICBpZiAocGxhbi0+ZmFp
bGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdl
KCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChtb2RlKQotICAg
ICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkpOwotCi0gICAgdW5zaWduZWQgY2FsbGVl
Q291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAgIGF1dG8qIGNvZGVCbG9j
ayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgdGhpcywgcGxhbi50YWtlQ2Fs
bExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0dWJzKCksIHBsYW4ubW9kZSgpLCBjYWxs
ZWVDb3VudCk7Ci0KLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMtPmpzQ2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldEpTRW50
cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAg
ICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRl
eCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gY29kZUJs
b2NrOwotfQotCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKLXsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dl
YkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7
CisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3Nl
bWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwg
V1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtLCBXVEZNb3Zl
KHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzgsNjEgKzYxLDQwIEBAIFN0cnVjdHVyZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxBcnJheUJ1ZmZl
cj4mJiBzb3VyY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3NvdXJjZUJ1
ZmZlcihzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkKIHsKIH0KIAotSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgV2FzbTo6TWVtb3J5TW9k
ZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2RlczsgKytpKSB7Ci0gICAgICAgIGlmICht
X2NvZGVCbG9ja3NbaV0gJiYgbV9jb2RlQmxvY2tzW2ldLT5pc1NhZmVUb1J1bihtZW1vcnkpKQot
ICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0aGlz
IG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCi0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwg
c3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3NvdXJjZUJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLQotICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxkQ29kZUJs
b2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLQotICAgIEFTU0VSVChwbGFuLmV4cG9ydHMoKS5zaXplKCkgPT0gbV9leHBv
cnRTeW1ib2xUYWJsZS0+c2l6ZSgpKTsKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAg
ICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKQotICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChleHAsIG1fZXhwb3J0U3ltYm9sVGFibGUtPmNvbnRhaW5zKGV4cC5maWVsZC5pbXBs
KCkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxvY2stPm1vZGUoKSk7Ci0g
ICAgY29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICByZXR1
cm4gY29kZUJsb2NrOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRl
U2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBS
ZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFdhc206OlBsYW4gcGxhbigmdm0sIHNvdXJj
ZSwgYnl0ZVNpemUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKyAg
ICBmb3IgKGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7CisgICAgICAg
IEFTU0VSVChleHAuZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworICAgICAg
ICBleHAuZmllbGQgPSBBdG9taWNTdHJpbmcoZXhwLmZpZWxkKTsKKyAgICB9CisgICAgZm9yIChh
dXRvJiBpbXAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cykgeworICAgICAgICBBU1NFUlQo
aW1wLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAgaW1wLmZp
ZWxkID0gQXRvbWljU3RyaW5nKGltcC5maWVsZCk7CisgICAgICAgIEFTU0VSVChpbXAubW9kdWxl
LmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAgaW1wLm1vZHVsZSA9IEF0
b21pY1N0cmluZyhpbXAubW9kdWxlKTsKKyAgICB9CiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBi
dWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0
aW9uKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmpl
Y3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5t
b2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9sVGFibGU6
OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkgeworICAg
IGZvciAoYXV0byYgZXhwIDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0cykgewogICAgICAg
ICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5v
TG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNl
dChvZmZzZXQpKSk7CisgICAgICAgIEFTU0VSVChleHAuZmllbGQuaW1wbCgpLT5pc0F0b21pYygp
KTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIHN0
YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihleHAuZmllbGQuaW1wbCgpKSwgU3ltYm9sVGFi
bGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0KIAotICAgIG1fc291cmNlQnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICBtX21vZHVsZUlu
Zm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBtX2V4cG9ydFN5
bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUpOwotICAgIGNvZGVCbG9j
a0Zvcihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCiB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4
IDM4OWU2M2EzMzVjMWMxMTdiNjk3Njk3MTBjNjNiZDdmODM0ZTg2ZTQuLmE0MTc4ODRkZDUxMTkz
Y2JkMGE2YzYyY2Q2NjkxZDMxOGY0YWUwZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTQ4LDM1ICs0OCwzMiBAQCBj
bGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBz
dGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpOworICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
UmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYpOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiAqbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IHRha2VSZXNlcnZl
ZE1lbW9yeSgpIHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS50YWtlUmVzZXJ2
ZWRNZW1vcnkoKTsgfQogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5m
b3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbklu
ZGV4U3BhY2UpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0
aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlz
IHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1v
cnkubW9kZSgpKS5nZXQoKTsgfQotICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUg
YmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNvbXBp
bGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0YXRl
KiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0
aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQorCisgICAgQXJyYXlCdWZmZXImIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQnVmZmVyLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+JiBjb2RlQmxvY2tGb3IoV2Fz
bTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6
ZV90Pihtb2RlKV07IH0KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBidWlsZENvZGVCbG9j
ayhWTSYsIEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9y
eU1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIGZyaWVuZCBjbGFzcyBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSop
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCB1aW50OF90KiBzb3Vy
Y2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVj
dHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwor
ICAgIFJlZjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAg
IFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok51bWJl
ck9mTWVtb3J5TW9kZXNdOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4
IGFjMzE4MWIzZjlkY2VlNGUxMzNiMDg3ZmY3MWY0OTAxNWU0ODhkMmQuLjA0MWRkMzU4NDg0NzRh
NWU4Zjg5N2RlNzdjYjRiZDc1MmM5ZmIyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVdvcmts
aXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFz
c2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5oIgpAQCAtNDUsOCArNDcsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8s
ICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlJbnN0YW5jZSwgQ1JFQVRFX01FVEhPRF9UQUJM
RShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IpIH07CiAKIC8qIFNvdXJjZSBmb3IgV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5oCkBAIC01NCwyNjkgKzU0LDUyIEBAIGNv
bnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IkZ1bmN0aW9uIiwgJkJhc2U6OnNfCiAgQGVuZAogICovCiAKK3VzaW5nIFdhc206OlBsYW47CisK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byYgdm0gPSBleGVjLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIElmIG1vZHVsZU9i
amVjdCBpcyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlz
IHRocm93bi4KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nh
c3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KCFqc01vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJm
aXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1i
bHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShl
eGVjLT5hcmd1bWVudCgwKSkpKSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFz
c2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFs
dWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBw
YXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBP
YmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50
ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9y
dEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmlu
ZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJl
IHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1l
VHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11
c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1
bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOwogICAgIAogICAgIFN0cnVjdHVy
ZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKLQotICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpj
cmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVj
dHVyZSkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0
YW5jZVN0cnVjdHVyZSkKLXsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotCi0gICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7Ci0KLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7
Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVs
ZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmpl
Y3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1w
b3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmplY3QgYW5kIHRoZSBXZWJB
c3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIpKSk7Ci0KLSAgICBJZGVudGlmaWVyIG1v
ZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRl
c2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShl
eGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgp
LCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0KLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNlU3RydWN0
dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYykpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAgICAvLyBM
ZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9m
IGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMg
YW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KLSAgICAvLyBMZXQg
aW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCi0g
ICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0gMDsKLSAgICB1bnNpZ25lZCBudW1JbXBv
cnRHbG9iYWxzID0gMDsKLQotICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7Ci0gICAg
Ym9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOwotICAgIC8vIEZvciBlYWNoIGltcG9ydCBpIGlu
IG1vZHVsZS5pbXBvcnRzOgotICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0cykgewotICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVl
IG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCi0gICAgICAg
IEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBv
cnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKLSAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5
cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBy
dW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOwotCi0gICAgICAgIC8vIDMu
IExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBpLml0ZW1fbmFtZSkKLSAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZh
bHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGltcG9ydC5m
aWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7
Ci0KLSAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewotICAgICAgICBjYXNlIFdhc206OkV4
dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5j
dGlvbiBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNl
LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdmFsdWUu
aXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rp
b24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlv
biA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlz
IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6Ci0gICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0gICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIGlmIChpc1dlYkFz
c2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBl
ckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2Yg
diBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHku
TGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVk
U2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2ln
bmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVy
ZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tD
bG9zdXJlXV0uCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5j
dGlvbi0+ZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0
aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAg
ICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25h
dHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVu
Y3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkg
ZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
aWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBo
b3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBieSBjb2Vy
Y2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRv
SlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBU
b1dlYkFzc2VtYmx5VmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlOiBkb25lIGFzIHBhcnQgb2Yg
UGxhbiBjb21waWxhdGlvbi4KLSAgICAgICAgICAgIC8vIGl2LiBBcHBlbmQgdiB0byBmdW5jcy4K
LSAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBs
aXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1i
bHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rp
b24pLgotCi0gICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5r
aW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9ydEZ1bmN0aW9uKHZtLCBm
dW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKyspOwotICAgICAgICAgICAgLy8gdi4gQXBwZW5k
IGNsb3N1cmUgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBi
eSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAgIC8vIDcuIE90aGVyd2lzZSAoaSBp
cyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRydWU7Ci0g
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBu
b3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIp
KSk7Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwotICAgICAgICAgICAgdWludDMyX3Qg
YWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoYWN0dWFsSW5p
dGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFi
bGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7Ci0K
LSAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBleHBlY3RlZE1heGltdW0g
PSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgewotICAgICAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0gPSB0YWJsZS0+
bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21h
eGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4aW11bSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxh
cmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgotICAgICAgICAg
ICAgLy8gaWlpLiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRUYWJsZSh2bSwgdGFibGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAg
ICAgLy8gNi4gSWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaGFzTWVtb3J5SW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBh
IHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeSk7Ci0gICAgICAgICAgICBoYXNNZW1vcnlJbXBvcnQgPSB0cnVlOwot
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxK
U1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIGkuIElmIHYg
aXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5M
aW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHku
TWVtb3J5IikpKTsKLQotICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlh
bCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7Ci0gICAgICAgICAgICBXYXNt
OjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOwot
ICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4
ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwn
IHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKLQotICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3Vu
dCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7
Ci0gICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnkt
Pm1lbW9yeSgpLm1heGltdW0oKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0p
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3Qg
aGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGFjdHVhbE1heGltdW0gPiBleHBlY3RlZE1heGltdW0p
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11
bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4K
LSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVtb3J5KTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xv
YmFsOiB7Ci0gICAgICAgICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9ydDoKLSAgICAg
ICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlw
ZUVycm9yLgotICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1w
b3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7Ci0g
ICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUo
dikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAg
ICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBl
ID09IFdhc206Okk2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xv
YmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBi
ZSBhIG51bWJlciIpKSk7Ci0gICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5
VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxz
ID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1h
dGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
V2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVl
LnRvRmxvYXQoZXhlYykpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1w
b3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAgICBpZiAoISFt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1w
b3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBp
bXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQo
KSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5
IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7Ci0g
ICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5
KCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5ID0ganNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9y
eSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6
TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICAgICAgICAgIGlmICgh
bWVtb3J5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldE1lbW9yeSh2bSwgZXhlYywKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1v
cnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBv
cnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAg
IC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2sg
KHJ1bm5hYmxlKSwgc28gd2UganVzdCBuZWVkIHRvIGZpbmFsaXplQ3JlYXRpb24uCisgICAgLy8g
MikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUg
YW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJl
YWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byB3YWl0IGZv
ciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgorCisgICAgaWYgKCFpbnN0YW5jZS0+aW5pdGlh
bGl6ZWQoKSkgeworICAgICAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKQorICAgICAgICAg
ICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KGluc3Rh
bmNlLT5jb2RlQmxvY2soKS0+cGxhbigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBS
ZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbW9kdWxlLT5zb3Vy
Y2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFBsYW46OmRvbnRGaW5hbGl6ZSkpOworICAgICAgICAg
ICAgcGxhbi0+c2V0TW9kZUFuZFByb21pc2UoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBs
YW4uY29weVJlZigpKTsKKworICAgICAgICAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1
cmVXb3JrbGlzdCgpOworICAgICAgICAgICAgd29ya2xpc3QuZW5xdWV1ZShwbGFuLmNvcHlSZWYo
KSk7CisgICAgICAgICAgICB3b3JrbGlzdC5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4u
Z2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAoISFtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBo
YXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24u
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFo
YXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBj
cmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAgICAg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4
ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1
Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVt
KCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRl
IGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCi0gICAgICAgICAgICAvLyBJZiBp
dCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxp
ZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAotICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWluc3RhbmNl
LT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9y
eSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxw
dHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAgICBp
bnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOwotICAgIH0KLQotICAgIC8v
IEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVs
ZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBmb3IgKHNpemVfdCBn
bG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOwot
ICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xv
YmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlw
ZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxz
KTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0
YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChn
bG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwotICAgIEpTVmFsdWUgc3RhcnRSZXN1
bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShzdGFy
dFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
LQotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2
bSwgZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDU5NzA5ZjUxNzU2ZGM1NWVhMmJkMjc4
NjYzNTA1ZTllMzkzN2YwMTMuLjM1OTk2MjJmMmNhMjQ5YjFlMWQ4MTIwY2EzNjNhZDYxNGU1YTZl
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC03NSwxMyArNzUsMTMgQEAgSlNW
YWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJ1ZmYKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHNpemVfdCBieXRlT2Zmc2V0
OwotICAgIHNpemVfdCBieXRlU2l6ZTsKLSAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZl
ckZyb21WYWx1ZShleGVjLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwg
ZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0g
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGUodm0sIGV4ZWMsIHN0cnVjdHVyZSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAg
ICBSZWZQdHI8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCAq
c291cmNlLCBXYXNtOjpQbGFuOjpWYWxpZGF0aW9uLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUp
KTsKKyAgICBpZiAoIXBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICBy
ZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJl
LCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOwogfQogCiBXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQ
cm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZmZmZWU1YzEwZjU5ZjgxZjFiYmUzY2Yx
ZDU0NzdjZjkwYzY4N2Y3MC4uZmI1NjFkOWRkYjg3ZTc0MDcyOWE2MjliNTE4NjE3MDU0OTE2YmEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtNzMsOCArNzMsMTAgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNv
bnN0IFdhc20KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1v
ZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpCi0gICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVu
dHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5maWVsZCkpOworICAgIGZvciAoY29uc3Qg
YXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhwb3J0cykgeworICAgICAgICBJZGVudGlm
aWVyIGZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVsZCk7CisgICAg
ICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChmaWVsZCwgZmllbGQp
KTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTg1LDE0ICs4NywxMyBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9zdGFydEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlID0gaW5zdGFuY2UtPm1vZHVsZSgpOwogICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCk7CiAKQEAgLTExMiw3ICsxMTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YQogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3Jl
YXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFy
ZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVt
IHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3Rp
YyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5k
LiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBl
ciB3aWxsIGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBmdW5j
dGlvbkltcG9ydENvdW50KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCA9IGV4cC5raW5kSW5kZXg7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1w
b3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0
RnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1i
bHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OwogICAgICAgICAgICAgICAgIGVsc2UgewpA
QCAtMTI4LDcgKzEyOSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhl
Y1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhCiAgICAgICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
Pndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4
KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0g
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3
YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQs
IGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWdu
YXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzksNyArMTgwLDcgQEAgdm9p
ZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJy
b3IgPSBmYWxzZTsKICAgICAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IHRydWU7CiAg
ICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIHN5bWJvbFRhYmxlUHV0VG91
Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBleHAuZmllbGQsIGV4cG9y
dGVkVmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMs
IHB1dFJlc3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1v
ZHVsZUVudmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgZXhwLmZp
ZWxkKSwgZXhwb3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25vcmVSZWFk
T25seUVycm9ycywgcHV0UmVzdWx0KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0
KTsKICAgICB9CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YQog
ICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNT
RVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwogICAgICAgICBpZiAo
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQo
KSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1w
b3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAgICAgICAgICAg
IEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0
RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0s
IHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKQEAgLTI1MSw3ICsyNTIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rp
b25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwogICAgICAgICAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNP
YmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCkp
OworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8
SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5j
dGlvbkltcG9ydCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZt
LCBmdW5jdGlvbkltcG9ydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBldmVy
IGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBh
cyB0aGUgdW53cmFwcGVkIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKaW5kZXggNWRjZWI0MmQ4ZjhjMjA2
OTgyOTRiYWEwYzZiYmNmNDliOGRjZDQzZC4uMmI4MzcyZTdjN2MzMzk0NzhlOWJlNzY1MTc3ZWI4
NTI0MTZkNDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCkBAIC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOworY2xhc3MgSlNXZWJBc3NlbWJs
eU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb247CiAKIC8vIEJhc2VkIG9uIHRoZSBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBzcGVjaWZpY2F0aW9uCkBAIC00Nyw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0NWY5ZDlh
YzFiMWZiYmNkNWNiOTFkN2ZhZWJlNDg5ZWQwNWI0OGY4Li5mYzIyMzY2MzJkOGJkODU5NmVmMDQ2
ZDNhMTcxZmQxNzg4MGFkNzM4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9K
U1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAzLTI3ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtl
IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlL2NvbXBpbGUgdHJ1bHkgYXN5bmNocm9ub3VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vYXNzZXJ0
LmpzOgorICAgICAgICAqIHdhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzOgorICAgICAgICAo
YXN5bmMudGVzdFByb21pc2VBUEkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJs
eS1jb21waWxlLXBhcmFsbGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRocm93RXhuKToK
KyAgICAgICAgKGFzeW5jLnRlc3QpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJs
eS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50ZXN0KToK
KyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanM6CisgICAg
ICAgIChhc3NlcnQuZXEuYXN5bmMudGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAg
ICAoYXNzZXJ0LmFzeW5jVGVzdC5hc3luYy50ZXN0KToKKyAgICAgICAgKGFzc2VydC5hc3luY1Rl
c3QpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeS5hc3luYy50ZXN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKGFzc2VydC50cnV0aHkpOiBEZWxldGVkLgorCiAyMDE3LTAzLTIzICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBqc05vbnRyaXZp
YWxTdHJpbmcgYWdyZXNzaXZlbHkgZm9yIFRvU3RyaW5nKEludDUyKQpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKaW5kZXggZDFhYTA4
N2Q1ZjZjZjE4YTM0MWJkYzcwNThhMmNiODdlOTU2YzdmYy4uMDg5YzZiNTZlZGVlY2E4NGE4ZjNk
OTdkY2EyZGZlNjdhNmY2NWQ3MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwor
KysgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCkBAIC0xNDAsMyArMTQwLDI0IEBAIGV4cG9ydCB7
CiAgICAgX3Rocm93cyBhcyB0aHJvd3MsCiAgICAgX2luc3RhbmNlb2YgYXMgaW5zdGFuY2VvZiwK
IH07CisKK2NvbnN0IGFzeW5jVGVzdEltcGwgPSAocHJvbWlzZSwgdGhlbkZ1bmMsIGNhdGNoRnVu
YykgPT4geworICAgIGFzeW5jVGVzdFN0YXJ0KDEpOworICAgIHByb21pc2UudGhlbih0aGVuRnVu
YykuY2F0Y2goY2F0Y2hGdW5jKTsKK307CisKK2NvbnN0IHByaW50RXhuID0gKGUpID0+IHsKKyAg
ICBwcmludCgiRmFpbGVkOiAiLCBlKTsKKyAgICBwcmludChlLnN0YWNrKTsKK307CisKK2V4cG9y
dCBjb25zdCBhc3luY1Rlc3QgPSAocHJvbWlzZSkgPT4gYXN5bmNUZXN0SW1wbChwcm9taXNlLCBh
c3luY1Rlc3RQYXNzZWQsIHByaW50RXhuKTsKK2V4cG9ydCBjb25zdCBhc3luY1Rlc3RFcSA9IChw
cm9taXNlLCBleHBlY3RlZCkgPT4geworICAgIGNvbnN0IHRoZW5DaGVjayA9ICh2YWx1ZSkgPT4g
eworICAgICAgICBpZiAodmFsdWUgPT09IGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0dXJuIGFz
eW5jVGVzdFBhc3NlZCgpOworICAgICAgICBwcmludCgiRmFpbGVkOiBnb3QgIiwgdmFsdWUsICIg
YnV0IGV4cGVjdGVkICIsIGV4cGVjdGVkKTsKKworICAgIH0KKyAgICBhc3luY1Rlc3RJbXBsKHBy
b21pc2UsIHRoZW5DaGVjaywgcHJpbnRFeG4pOworfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1j
b21waWxlLmpzCmluZGV4IGYzNDNjNmU5M2M3MzEyNWU0OWFkOTNmNGFhNzJhMWEwOWU2OWUyYmIu
LjYzMjQzMDI3YmI5MjM2NzBjY2M4M2MxNTU3NmRkY2E1ZDllYTZlNzMgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS9Nb2R1bGUtY29tcGlsZS5qcwpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cyc7CiAKLWxldCBkb25lID0gZmFsc2U7CiBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgp
IHsKICAgICB7CiAgICAgICAgIC8vIENhbid0IGRlY2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnku
CkBAIC0xNCwzOSArMTMsMzAgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAg
ICAgICAgICAgICAuQ29kZSgpCiAgICAgICAgICAgICAuRW5kKCk7CiAKLSAgICAgICAgbGV0IHRo
cmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJs
eS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2go
ZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRo
eShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFz
c2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1w
b3J0IGhhcyBhIG1lbW9yeSAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5t
ZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAv
IDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9y
eSIpOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewot
ICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGlu
c3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJm
aXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZl
ciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZSgpJykiKTsKICAgICAgICAgfQotICAg
ICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0
aHJldyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1i
bHkuY29tcGlsZSgyMCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcg
PSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9y
KTsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0
IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2Vi
QXNzZW1ibHkuY29tcGlsZSgyMCknKSIpOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0
aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKQEAgLTYxLDEwICs1MSw2IEBAIGFzeW5jIGZ1bmN0
aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgICAgICBsZXQgbW9kdWxlID0gYXdhaXQgV2ViQXNz
ZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwogICAgICAgICBhc3Nl
cnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgfQot
Ci0gICAgZG9uZSA9IHRydWU7CiB9CiAKLXRlc3RQcm9taXNlQVBJKCk7Ci1kcmFpbk1pY3JvdGFz
a3MoKTsKLWFzc2VydC50cnV0aHkoZG9uZSk7Cithc3NlcnQuYXN5bmNUZXN0KHRlc3RQcm9taXNl
QVBJKCkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktY29t
cGlsZS1wYXJhbGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBp
bGUtcGFyYWxsZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJmZWFlY2I5ZTg0MTcyODNlYzRhOWFhNzQ5ODJi
OTRjYjQwOWQ2OAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFz
c2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJzsKKworYXN5bmMgZnVuY3Rpb24gdGhyb3dFeG4oKSB7CisgICAgdGhyb3cgbmV3IEVy
cm9yKCk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CisgICAgY29uc3QgbG9vcERlcHRo
ID0gMTA7CisgICAgY29uc3QgbnVtQ29tcGlsYXRpb25zID0gMTsKKyAgICBjb25zdCBudW1WYXJz
ID0gMzA7CisgICAgY29uc3QgcGFyYW1zID0gW107CisgICAgcGFyYW1zLmxlbmd0aCA9IG51bVZh
cnM7CisgICAgcGFyYW1zLmZpbGwoImkzMiIpOworCisgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1
aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
KQorICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAuRnVuY3Rp
b24oImZvbyIsIHsgcGFyYW1zLCByZXQ6ICJpMzIiIH0pOworCisgICAgY29uc3QgbWFrZUxvb3Ag
PSAoYnVpbGRlciwgZGVwdGgpID0+IHsKKyAgICAgICAgaWYgKGRlcHRoID09PSAwKQorICAgICAg
ICAgICAgcmV0dXJuIGJ1aWxkZXI7CisKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAg
ICAgICAgIC5Mb29wKCJpMzIiLCAoYikgPT4geworICAgICAgICAgICAgICAgICAgYi5HZXRMb2Nh
bCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAg
ICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisg
ICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIGJ1aWxkZXIKKworICAgIH0KKworICAgIGJ1aWxkZXIgPSBtYWtlTG9vcChidWlsZGVyLCBs
b29wRGVwdGgpOworICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpLkVuZCgpOworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworCisgICAgbGV0IGNvbXBpbGF0
aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kp
IHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2ViQXNzZW1ibHkuY29tcGlsZShiaW4pKTsK
KyAgICB9CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCithc3Nl
cnQuYXN5bmNUZXN0KHRlc3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dl
Yi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkv
d2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NDdiY2Fk
MGI4ODgwNDc2YTc4M2JkZGMxYTk0MWNlYTQyNjBkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcwpAQCAt
MCwwICsxLDc1IEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworCithc3luYyBmdW5jdGlvbiB0ZXN0
KCkgeworICAgIGNvbnN0IGxvb3BEZXB0aCA9IDEwMDsKKyAgICBjb25zdCBudW1Db21waWxhdGlv
bnMgPSAxOworICAgIGNvbnN0IG51bVZhcnMgPSAzMDsKKyAgICBjb25zdCBwYXJhbXMgPSBbXTsK
KyAgICBwYXJhbXMubGVuZ3RoID0gbnVtVmFyczsKKyAgICBwYXJhbXMuZmlsbCgiaTMyIik7CisK
KyAgICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIs
IHsgaW5pdGlhbDogMCB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBw
YXJhbXMsIHJldDogImkzMiIgfSk7CisKKyAgICBjb25zdCBtYWtlTG9vcCA9IChidWlsZGVyLCBk
ZXB0aCkgPT4geworICAgICAgICBpZiAoZGVwdGggPT09IDApCisgICAgICAgICAgICByZXR1cm4g
YnVpbGRlcjsKKworICAgICAgICBidWlsZGVyID0gYnVpbGRlcgorICAgICAgICAgICAgLkxvb3Ao
ImkzMiIsIChiKSA9PiB7CisgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisg
ICAgICAgICAgICAgICAgICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0
TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAg
ICAgIC5CcklmKDEpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRo
IC0gMSkuQnIoMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXI7Cisg
ICAgfQorCisgICAgYnVpbGRlciA9IG1ha2VMb29wKGJ1aWxkZXIsIGxvb3BEZXB0aCk7CisgICAg
YnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5
Lk1lbW9yeSh7IGluaXRpYWw6IDAgfSk7CisgICAgY29uc3QgaW1wb3J0T2JqZWN0ID0geyAiaW1w
IjogeyAibWVtb3J5IjogbWVtb3J5IH0gfTsKKworICAgIC8vIENvbXBpbGUgYSBidW5jaCBvZiBp
bnN0YW5jZXMgaW4gcGFyYWxsZWwuCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGls
YXRpb25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCBpbXBvcnRPYmplY3QpKTsK
KyAgICB9CisKKyAgICBsZXQgW2luc3RdID0gYXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25z
KTsKKyAgICBsZXQgbW9kdWxlID0gaW5zdC5tb2R1bGU7CisKKyAgICAvLyBDb21waWxlIGEgYnVu
Y2ggb2YgaW5zdGFuY2VzIGZyb20gbW9kdWxlcyBpbiBwYXJhbGxlbC4KKyAgICBjb21waWxhdGlv
bnMgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNvbXBpbGF0aW9uczsgKytpKSB7
CisgICAgICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVs
ZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgfQorCisgICAgYXdhaXQgUHJvbWlzZS5hbGwoY29tcGls
YXRpb25zKTsKKworICAgIC8vIENvbXBpbGUgYW4gaW5zdGFuY2UgZnJvbSBhIG1vZHVsZSBpbiBw
YXJhbGxlbCwgaGF2ZSBzeW5jIGNvbXBpbGF0aW9uIHN0ZWFsIGl0LgorICAgIGNvbXBpbGF0aW9u
cyA9IFtdOworICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1v
ZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIGltcG9ydE9iamVjdCk7CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChjb21waWxh
dGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCmluZGV4IGE5M2JjNjA1ZmYxN2Rk
ZWU4MDFmN2E3NTMzNDE4NmE4NjFkNDQyYWQuLmZiNDg4N2EwN2M0ZTc5MWViMzU1MDg3NjU4OTg1
OTg5MGViMjE2NGUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5
LWluc3RhbnRpYXRlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWlu
c3RhbnRpYXRlLmpzCkBAIC0xOSwxOCArMTksMTQgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmlu
c3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9u
IHRlc3QoKSB7CiAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3Nl
bWJseS5pbnN0YW50aWF0ZShiaW4pOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0
YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGFzc2VydC50cnV0aHkoaW5zdGFu
Y2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5jZSk7CiAgICAgICAgIGFzc2VydC5lcShp
bnN0YW5jZS5leHBvcnRzLmZvbygyMCksIDEpOwotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9
CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRo
eShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTQ4LDE5
ICs0NCwxNSBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsK
IAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxl
dCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJs
eS5pbnN0YW50aWF0ZShiaW4sIG51bGwpOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAg
ICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHku
aW5zdGFudGlhdGUgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IChldmFsdWF0aW5nICdX
ZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpJykiKTsKICAgICAgICAgfQotICAgICAg
ICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tz
KCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3Qo
KSk7CiB9CiAKIHsKQEAgLTc4LDIwICs3MCwxNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5z
dGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24g
dGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5j
ZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwogICAgICAgICB9IGNhdGNo
KGUpIHsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvcik7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6IGNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGgg
dW5leHBlY3RlZCB0eXBlLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICdXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZShiaW4pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1l
c3NhZ2UsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCB2YWxpZGF0ZTogY29udHJvbCBmbG93
IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAiKTsK
ICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0g
ICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3Nl
cnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTExMCwxOSArOTgsMTUgQEAgYXNzZXJ0
LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4g
PSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwog
ICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBs
ZXQge21vZHVsZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmlu
LCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAg
ICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShl
Lm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJs
eS5NZW1vcnkiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAg
ICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25l
KTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTE0MSwyMCArMTI1
LDE2IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRv
bmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewog
ICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwog
ICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUo
YmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAg
ICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50
aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5l
cShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3Nl
bWJseS5NZW1vcnkiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAK
LSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShk
b25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTE3MiwxOCAr
MTUyLDE0IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwog
CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0
IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICBsZXQgaW5zdGFu
Y2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUpOwogICAgICAgICBhc3Nl
cnQudHJ1dGh5KGluc3RhbmNlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwogICAg
ICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAgZG9u
ZSA9IHRydWU7CiAgICAgfQogCi0gICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwot
ICAgIGFzc2VydC50cnV0aHkoZG9uZSk7CisgICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwog
fQogCiB7CkBAIC0yMDIsNyArMTc4LDYgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50
aWF0ZSgyNSk7CkBAIC0yMTAsMTAgKzE4NSw3IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0
YW50aWF0ZS5sZW5ndGgsIDEpOwogICAgICAgICAgICAgLy8gRklYTUU6IEJldHRlciBlcnJvciBt
ZXNzYWdlIGhlcmUuCiAgICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1
YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKDI1KScpIik7CiAgICAgICAgIH0KLSAgICAg
ICAgZG9uZSA9IHRydWU7CiAgICAgfQogCi0gICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNr
cygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7CisgICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0
KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305595</attachid>
            <date>2017-03-28 08:32:04 -0700</date>
            <delta_ts>2017-03-28 10:32:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170328083203.patch</filename>
            <type>text/plain</type>
            <size>228212</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
M2FkNDRiNDBiOGJjOTA5NmVjZmI1NzRhNDc2ODk5N2E4NjdhNDUyLi43ZWMwYzRmZjM4MzQzYjE5
NGNkOTA0NjJhODNlMGQzYjIyNDRkMDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0U3Rh
cnQpOgorICAgICAgICAoZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQpOgorICAgICAgICAoZnVuY3Rp
b25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VB
cmd1bWVudHMpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlz
ZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVy
cmVkOjpwcm9taXNlQXN5bmNQZW5kaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5jcHAuCisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6Cisg
ICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKToKKyAgICAgICAgKEpTQzo6
SlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9v
cFRpbWVyOjp0aW1lckRpZEZpcmUpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcik6
CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24pOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayk6CisgICAgICAgICogcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmguCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzdG9w
UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6OnJlamVj
dCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlND
OjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpj
b21waWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUluc3RhbnRp
YXRlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAg
ICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpwbGFuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6cnVubmFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjplcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxsZWVzKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAq
IHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11
bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpoYXNSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjp0
YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJ
bmZvcm1hdGlvbjo6bW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpNb2R1bGVQYXJzZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENv
dW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxp
emVDYWxsZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OmRvbnRGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmV4cG9ydHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbnRlcm5hbEZ1bmN0aW9u
Q291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlTW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlQ2FsbExpbmtJbmZvcyk6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnRha2VXYXNtRXhpdFN0dWJzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6c2V0TW9kZUFuZFByb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGVuZGluZ1Byb21pc2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVycm9y
TWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNC
ZWVuUHJlcGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW5JbmxpbmVzLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmguCisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNt
L1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnByaW9yaXR5U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9yaXR5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6Oml0ZXJhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21w
bGV0ZVBsYW5TeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0
b3BBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpl
bnN1cmVXb3JrbGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6V29ya2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVk
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaDoKKwogMjAxNy0wMy0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBiZWxvbmdzIGluIEphdmFTY3JpcHRDb3JlL3dhc20vanMgbm90IEphdmFTY3JpcHRDb3JlL3dh
c20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1YWY3MTRlMDk1MDlmOGE1
ZWNmMTY0YWFjM2FmOWE5NDBiMjEyNzZiLi43YTNjYTAxZTYyZTZlZmFmMmYwZDYwZjcyMGJiZDY0
MjFjMjBhMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01MDMsNyAr
NTAzLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXBQcm9maWxl
ci5jcHAKICAgICBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKICAgICBoZWFwL0hlYXBTbmFwc2hvdEJ1
aWxkZXIuY3BwCi0gICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL0xhcmdl
QWxsb2NhdGlvbi5jcHAKQEAgLTgwMiw2ICs4MDEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogICAgIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKICAgICBydW50aW1lL0pTUHJveHkuY3BwCisg
ICAgcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKICAgICBydW50aW1lL0pTU2NvcGUuY3BwCiAg
ICAgcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCiAgICAgcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcApAQCAtODUxLDYgKzg1MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgcnVudGltZS9PcGVyYXRpb25zLmNwcAogICAgIHJ1bnRpbWUvT3B0aW9ucy5j
cHAKICAgICBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAorICAgIHJ1bnRpbWUvUHJvbWlz
ZURlZmVycmVkVGltZXIuY3BwCiAgICAgcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCiAg
ICAgcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCiAgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNw
cApAQCAtOTQ0LDYgKzk0NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgd2Fz
bS9XYXNtUGxhbi5jcHAKICAgICB3YXNtL1dhc21TaWduYXR1cmUuY3BwCiAgICAgd2FzbS9XYXNt
VmFsaWRhdGUuY3BwCisgICAgd2FzbS9XYXNtV29ya2xpc3QuY3BwCiAKICAgICB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ZWNhNWZmZGMzYTAwNjQzZDMy
YTk0ODExYzM0MTcxN2U1YjEwNDZhLi5mMDA3MGZhZjI5YTMwMmM3MmJiNDBiNzhiNmQzNjZlNGQ4
M2VhMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMyMSwxMSArMTMyMSwx
NyBAQAogCQk1MkM5NTJCOTE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI4MTlBMjhB
MUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovOyB9OwogCQk1MkY2QzM1RDFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUIxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzBGQjMwMjFFN0EwQjZFMDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi87IH07CisJ
CTUzMEZCMzA0MUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDMxRTdBMTE0NjAwM0Mx
OUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi87IH07CiAJCTUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi87IH07CiAJCTUz
MTM3NEJGMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyog
V2FzbVBsYW4uY3BwICovOyB9OwogCQk1MzNCMTVERjFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9w
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzQjE1
REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQxRkM3MDFEQUMzM0U1MDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hl
Y2tWYWx1ZS5jcHAgKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oICovOyB9OworCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcw
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzNDYzODczMUU3MEQwMTUwMEYxMkFDMSAv
KiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3Bw
ICovOyB9OworCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGlt
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYz
ODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oICovOyB9OworCQk1
MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzYxRTcxRTA2
RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAqLzsgfTsKIAkJNTM0ODZCQjcx
QzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQjYxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlw
ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsK
IAkJNTM0ODZCQkIxQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ4NkJCQTFDMThFODQ1MDBG
NkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJNTM0OTAyODUxQzcyNzZCNzAwMTJC
Q0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzQ5MDI4MjFDNzI0MkM4MDAxMkJDQjggLyogVHlwZWRBcnJheUNU
ZXN0LmNwcCAqLzsgfTsKQEAgLTEzNTksNiArMTM2NSw3IEBACiAJCTUzRjQwRTk1MUQ1QTdBRUYw
MDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi87IH07
CiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlv
blByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y4RDFGRjFFODM4N0Q0MDBE
MjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIy
NzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNG
MzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9OwogCQk1M0ZEMDREMzFEN0FC
Mjc3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAv
KiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwpAQCAtMjIzOCw4ICsyMjQ1LDYgQEAK
IAkJQzJDRjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUJGMTZFMTVB
ODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi87IH07CiAJCUMyQ0YzOUMyMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKIAkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8q
IEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMkU1MjZCRDE1OTBFRjAw
MDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3Bw
ICovOyB9OwotCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQzE1OTBFRjAw
MDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJh
cmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07
CiAJCUMyRkNBRTEwMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi87IH07CiAJCUMyRkNBRTEx
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzgxMCwxMSArMzgxNSwxNyBAQAogCQk1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9m
aWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVCMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHBh
dGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwRkIzMDExRTdBMEI2RTAwM0MxOURE
IC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
V29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwRkIzMDMxRTdBMTE0
NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyog
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODcwMUU3MENGM0QwMEYx
MkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1J1bkxvb3BUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3
MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNSdW5Mb29wVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVk
VGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvbWlzZURlZmVycmVk
VGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzYxRTcxRTA2RTAw
RjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQjYxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlw
ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVk
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ5MDI4MjFDNzI0MkM4
MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFR5cGVkQXJyYXlDVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvVHlwZWRB
cnJheUNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NTQsNiArMzg2
NSw3IEBACiAJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjZC
RjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjhEMUZGMUU4
Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVBsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0RDEx
RDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc5OCw4ICs0ODEwLDYgQEAKIAkJQzJDRjM5QkYx
NkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQVBJV3JhcHBlck9iamVjdC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3Jh
cHBlck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FQSVdyYXBw
ZXJPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJEQTc3ODIxOEUyNTk5
OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhlYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyRTUyNkJC
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSGVhcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkxOSw4ICs1OTI5LDYgQEAKIAkJCQlBNTRDMkFB
RjFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggKi8sCiAJCQkJQTUzMTFDMzQxQzc3
Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwICovLAogCQkJCUE1MzExQzM1
MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggKi8sCi0JCQkJQzJFNTI2
QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCi0JCQkJQzJFNTI2QkMxNTkw
RUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAogCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJ
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLAogCQkJCUMyNUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAv
KiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLywKQEAgLTYyODgsMTEgKzYyOTYsMTQgQEAKIAkJCQk1
M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLAogCQkJCTUzMTM3NEJF
MUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJCQkJNTMxMzc0QkMxRDVDRTY3
NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8sCisJCQkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2
IC8qIFdhc21QbGFuSW5saW5lcy5oICovLAogCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAv
KiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2Fz
bVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLywKIAkJCQk1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZhbGlk
YXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRl
LmggKi8sCisJCQkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAg
Ki8sCisJCQkJNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovLAog
CQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTY0
NDksNiArNjQ2MCw4IEBACiAJCQkJMTRBMTU2MzAxMDk2NjM2NTAwNkZBMjYwIC8qIERhdGVJbnN0
YW5jZUNhY2hlLmggKi8sCiAJCQkJQkNEMjAzNDcwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90
b3R5cGUuY3BwICovLAogCQkJCUJDRDIwMzQ4MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90
eXBlLmggKi8sCisJCQkJNTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJl
ZFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURl
ZmVycmVkVGltZXIuaCAqLywKIAkJCQkxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5l
UHJvcGVydHlBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEZFMDUwMEYxQUE5MDkxMTAwRDMzQjMzIC8q
IERpcmVjdEFyZ3VtZW50cy5jcHAgKi8sCiAJCQkJMEZFMDUwMTAxQUE5MDkxMTAwRDMzQjMzIC8q
IERpcmVjdEFyZ3VtZW50cy5oICovLApAQCAtNjgzNyw2ICs2ODUwLDggQEAKIAkJCQkwRjdDMzlG
QzFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0SW5saW5lcy5oICovLAogCQkJCUJDRDIw
MkJGMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwICovLAogCQkJCUJDRDIw
MkMwMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuaCAqLywKKwkJCQk1MzQ2Mzg3
MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovLAorCQkJCTUzNDYzODcw
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovLAogCQkJCTcwQjBBOUQwMUE5
QjY2MjAwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCAqLywKIAkJCQk1Mjc3NzNERDFBQUY4M0FD
MDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwICovLAogCQkJCTUyQzA2MTFEMUFBNTFFMUIwMEI0
QURCQSAvKiBSdW50aW1lVHlwZS5oICovLApAQCAtODEzMCw2ICs4MTQ1LDcgQEAKIAkJCQkwRkVD
ODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRp
dml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYwMjc2QzAwMTNDODhGIC8qIEIz
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlCNzgwMUUwMzU1OUMwMDVCRUVE
OCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODI1MCw2ICs4MjY2LDcgQEAKIAkJ
CQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyOUQ4REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjRCNEJEMUU4ODQ0OUEwMERC
QkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0
RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg1
MzcsNiArODU1NCw3IEBACiAJCQkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2
IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDhFM0MxREE0MUI4
MTAwMzk0NzhGIC8qIERPTUpJVFBhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU2RjU2REUxRTY0RUFENjAwRDE3ODAxIC8qIFZNVHJhcHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzN0FEODNDMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRQYXRjaHBvaW50UGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzdBRDgzRDFEQTQ5Mjg2MDBGM0Q0MTIgLyogRE9NSklUUmVn
LmggaW4gSGVhZGVycyAqLywKQEAgLTg3MDcsNyArODcyNSw2IEBACiAJCQkJQTUzOThGQUIxQzc1
MERBNDAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0QzJB
QjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBREU2NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGls
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzQsNyBAQAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5Jbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVn
RXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2Mjkz
MDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDEx
MUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTc3LDYg
Kzk5OTUsNyBAQAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0QjRDQTFFODg5RDdCMDBEQkJFODYgLyogQjNW
YXJpYWJsZUxpdmVuZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTExMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMw
RkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhERjUxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWlu
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUwRDFCRjAyNzZDMDAxM0M4OEYg
LyogQjNEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjcwLDYgKzEwMjg5LDcg
QEAKIAkJCQkxNEFEOTExNzFEQ0E5N0ZEMDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDczNDFFMjFEQzJDRTk2MDBBQTI5QkEgLyogRXZhbEV4ZWN1dGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0OTgyMDMxODkxRDBCMDAwODFFNUI4IC8qIEV2
ZW50TG9vcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxQzBGRkYxQjE5NEZE
MTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTgwQzE5QjFE
Nzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEyREUwRjE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTEwMzQ3LDcgKzEwMzY3LDYgQEAKIAkJCQlBNTM5OEZBQzFDNzUwREE2
MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NEMyQUIw
MUM2NTQ0RUUwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBENDE0QkJEMjQ5MDBCRkUyNzIgLyogSG9zdENhbGxS
ZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQzIxNDMwODFDQTMyRTU4MDAwQTg4
NjkgLyogSUNTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRTEwN0VDMzc2MDA0
MjdBNDggLyogSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNjcyLDYgKzEwNjkx
LDcgQEAKIAkJCQk5OTJBQkNGOTFCRUE5QkQyMDA2NDAzQTAgLyogUmVtb3RlQXV0b21hdGlvblRh
cmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNDFFNEU4NEE0MDAzNTk1M0IgLyog
UmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk5OThF
RDY3NDFCRUQ3MEFDMDBERDgwMTcgLyogUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUzNDYzODc3MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMg
LyogUmVtb3RlSW5zcGVjdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTU1NjY4
NjFFNEU4QjBGMDBBQUUxM0MgLyogUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk5MkY1NkI1MUU0RTg0QTgwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0b3JDb2NvYS5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NB
Y3Rpdml0eUNhbGxiYWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5
Q2FsbGJhY2suaAppbmRleCBkZGVlMjU4M2U0OWU2Yjk2OTM5MDgwZTMzOGViNWE5OWMwNDBiOTJj
Li5hZjQ3NTg4ZDYwMTE5YWQ4ZGQ1MTVkOGY0YTUwY2ZjNzI5NTgxMzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaApAQCAtMjgsNyArMjgs
NyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1lci5oIgorI2luY2x1ZGUg
IkpTUnVuTG9vcFRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKENG
KQpAQCAtNDAsOCArNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s7CiBjbGFzcyBIZWFwOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZSA9IEpTUnVuTG9vcFRpbWVyOwogICAgIHN0YXRpYyBSZWZQdHI8RnVsbEdD
QWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlRnVsbFRpbWVyKEhlYXAqKTsKICAgICBzdGF0aWMgUmVm
UHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlRWRlblRpbWVyKEhlYXAqKTsKIApAQCAtNzAs
MjEgKzcxLDIxIEBAIHByb3RlY3RlZDoKIAogI2lmIFVTRShDRikKICAgICBHQ0FjdGl2aXR5Q2Fs
bGJhY2soVk0qIHZtKQotICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZt
KQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUp
CiAgICAgewogICAgIH0KICNlbGlmIFVTRShHTElCKQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhW
TSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAg
ICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxheShzX2RlY2FkZSkKICAgICB7
CiAgICAgfQogI2Vsc2UKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQotICAgICAgICA6
IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0
cnVlKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5NjEyOGQwMzgzOGNhNGE3NDU1MGVk
OTE2ZGY3N2EzMjVkNmI0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhlYXBU
aW1lci5oIgotCi0jaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSW5j
cmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1N0
cmluZy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShHTElCKQotI2luY2x1
ZGUgPGdsaWIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIFVTRShDRikKLSAg
ICAKLWNvbnN0IENGVGltZUludGVydmFsIEhlYXBUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICog
MjQgKiAzNjUgKiAxMDsKLQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAgIDogbV92
bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKLXsKLSAgICBzZXRSdW5Mb29w
KHZtLT5oZWFwLnJ1bkxvb3AoKSk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzZXRSdW5Mb29wKENG
UnVuTG9vcFJlZiBydW5Mb29wKQotewotICAgIGlmIChtX3J1bkxvb3ApIHsKLSAgICAgICAgQ0ZS
dW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5M
b29wQ29tbW9uTW9kZXMpOwotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90aW1l
ci5nZXQoKSk7Ci0gICAgICAgIG1fcnVuTG9vcC5jbGVhcigpOwotICAgICAgICBtX3RpbWVyLmNs
ZWFyKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChydW5Mb29wKSB7Ci0gICAgICAgIG1fcnVuTG9v
cCA9IHJ1bkxvb3A7Ci0gICAgICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5M
b29wVGltZXJDb250ZXh0KSk7Ci0gICAgICAgIG1fY29udGV4dC5pbmZvID0gdGhpczsKLSAgICAg
ICAgbV90aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgc19kZWNhZGUsIHNfZGVjYWRlLCAwLCAwLCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSwg
Jm1fY29udGV4dCkpOwotICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0KCks
IG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgfQotfQotCi1IZWFw
VGltZXI6On5IZWFwVGltZXIoKQotewotICAgIHNldFJ1bkxvb3AoMCk7Ci19Ci0KLXZvaWQgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGNvbnRleHRQdHIp
Ci17Ci0gICAgSGVhcFRpbWVyKiB0aW1lciA9IHN0YXRpY19jYXN0PEhlYXBUaW1lcio+KGNvbnRl
eHRQdHIpOwotICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsKLQotICAgIFJlZlB0cjxWTT4g
dm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOwotICAgIGlmICghdm0pIHsKLSAgICAgICAgLy8g
VGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KLSAg
ICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0uZ2V0KCkpOwotICAgICAg
ICB0aW1lci0+ZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2Nr
KCk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbElu
U2Vjb25kcykKLXsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdl
dCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGludGVydmFsSW5TZWNvbmRzKTsKLSAg
ICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRpbWVy
KCkKLXsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBD
RkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHNfZGVjYWRlKTsKLSAgICBtX2lzU2NoZWR1bGVk
ID0gZmFsc2U7Ci19Ci0KLSNlbGlmIFVTRShHTElCKQotCi1jb25zdCBsb25nIEhlYXBUaW1lcjo6
c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKLQotc3RhdGljIEdTb3VyY2VGdW5j
cyBoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMgPSB7Ci0gICAgbnVsbHB0ciwgLy8gcHJlcGFyZQot
ICAgIG51bGxwdHIsIC8vIGNoZWNrCi0gICAgLy8gZGlzcGF0Y2gKLSAgICBbXShHU291cmNlKiwg
R1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbgotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHVzZXJEYXRhKTsKLSAgICB9LAotICAgIG51bGxw
dHIsIC8vIGZpbmFsaXplCi0gICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxsYmFjawotICAgIG51
bGxwdHIsIC8vIGNsb3N1cmVfbWFyc2hhbGwKLX07Ci0KLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZN
KiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCi0g
ICAgLCBtX3RpbWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJmhlYXBUaW1lclNvdXJjZUZ1bmN0
aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkpCi17Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWUobV90aW1l
ci5nZXQoKSwgIltKYXZhU2NyaXB0Q29yZV0gSGVhcFRpbWVyIik7Ci0gICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVh
biB7Ci0gICAgICAgIGF1dG8mIGhlYXBUaW1lciA9ICpzdGF0aWNfY2FzdDxIZWFwVGltZXIqPih1
c2VyRGF0YSk7Ci0gICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKGhlYXBUaW1lci5tX3Rp
bWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSGVhcFRpbWVyOjpzX2RlY2FkZSAq
IEdfVVNFQ19QRVJfU0VDKTsKLSAgICAgICAgaGVhcFRpbWVyLnRpbWVyRGlkRmlyZSgpOwotICAg
ICAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci0g
ICAgZ19zb3VyY2VfYXR0YWNoKG1fdGltZXIuZ2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90aHJl
YWRfZGVmYXVsdCgpKTsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLSAgICBnX3Nv
dXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6dGltZXJE
aWRGaXJlKCkKLXsKLSAgICBtX2FwaUxvY2stPmxvY2soKTsKLQotICAgIGlmICghbV9hcGlMb2Nr
LT52bSgpKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNo
b3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIobV92
bSk7Ci0gICAgICAgIGRvV29yaygpOwotICAgIH0KLQotICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7
Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vj
b25kcykKLXsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dl
dF9tb25vdG9uaWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VTRUNfUEVSX1NFQyk7
Ci0gICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxU
aW1lcigpCi17Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19n
ZXRfbW9ub3RvbmljX3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSBmYWxzZTsKLX0KLSNlbHNlCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSog
dm0pCi0gICAgOiBtX3ZtKHZtKQotewotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQotewot
fQotCi12b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVy
OjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKLXsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRp
bWVyKCkKLXsKLX0KLSNlbmRpZgotICAgIAotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDcyYjQ3MWY2MGRiOGM2Mzc0YzU1MDE5OGQwYmU5ZTJmY2NhOGE2YjcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNFKENGKQotI2luY2x1
ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShH
TElCKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgSlNMb2NrOwotY2xhc3MgVk07Ci0KLWNsYXNzIEhlYXBUaW1lciA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxIZWFwVGltZXI+IHsKLXB1YmxpYzoKLSAgICBIZWFw
VGltZXIoVk0qKTsKLSNpZiBVU0UoQ0YpCi0gICAgc3RhdGljIHZvaWQgdGltZXJEaWRGaXJlKENG
UnVuTG9vcFRpbWVyUmVmLCB2b2lkKik7Ci0jZW5kaWYKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAw
OwotCi0gICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcyk7Ci0g
ICAgdm9pZCBjYW5jZWxUaW1lcigpOwotICAgIGJvb2wgaXNTY2hlZHVsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzU2NoZWR1bGVkOyB9Ci0KLSNpZiBVU0UoQ0YpCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7Ci0jZW5kaWYgLy8gVVNFKENGKQotICAg
IAotcHJvdGVjdGVkOgotICAgIFZNKiBtX3ZtOwotCi0gICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlM
b2NrOwotICAgIGJvb2wgbV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07Ci0jaWYgVVNFKENGKQotICAg
IHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKLQotICAgIFJldGFpblB0cjxD
RlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBt
X3J1bkxvb3A7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKLQot
ICAgIExvY2sgbV9zaHV0ZG93bk11dGV4OwotI2VsaWYgVVNFKEdMSUIpCi0gICAgc3RhdGljIGNv
bnN0IGxvbmcgc19kZWNhZGU7Ci0gICAgdm9pZCB0aW1lckRpZEZpcmUoKTsKLSAgICBHUmVmUHRy
PEdTb3VyY2U+IG1fdGltZXI7Ci0jZW5kaWYKLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBpbnZh
bGlkYXRlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCmluZGV4IGNmZTg5Yjg3MDdjZWJj
N2Y0YWY0ZDYzNTY2OTQxMWUxN2RjMGFjNTIuLjhjYmZhOWU4MDQwZGM2MWVmYjAxOWIyMTQ1NTQ0
NTVlMmZhODMxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmNwcApAQCAtNDEsMTEgKzQxLDExIEBAIHN0YXRpYyBjb25zdCBkb3VibGUg
c3dlZXBUaW1lTXVsdGlwbGllciA9IDEuMCAvIHN3ZWVwVGltZVRvdGFsOwogCiB2b2lkIEluY3Jl
bWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcigpCiB7Ci0gICAgSGVhcFRpbWVyOjpzY2hlZHVs
ZVRpbWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlwbGllcik7CisgICAgQmFzZTo6
c2NoZWR1bGVUaW1lcihzd2VlcFRpbWVTbGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOwogfQog
CiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihIZWFwKiBoZWFwKQotICAg
IDogSGVhcFRpbWVyKGhlYXAtPnZtKCkpCisgICAgOiBCYXNlKGhlYXAtPnZtKCkpCiAgICAgLCBt
X2N1cnJlbnRBbGxvY2F0b3IobnVsbHB0cikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgKaW5kZXggMzRmYTg4Y2MyZWZhNzVjNGYyOGMw
NTdjNzg5YTZhZTExOTgwM2JlNi4uNzZkNDU0ZjNjMDRiMzFiZDExNGI4MDcxNDNlNGQxZTE1YTRl
NWJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFw
VGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMyw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKIAotY2xhc3MgSW5jcmVtZW50
YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIg
OiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1J1
bkxvb3BUaW1lcjsKICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBJbmNyZW1lbnRhbFN3
ZWVwZXIoSGVhcCopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdGFydFN3ZWVwaW5n
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3Nh
cnlUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5jcHAKaW5kZXggNmUzMTc2YzJjYzc2YjY4NDRjM2FmZWIwNzNjNmJjYTEzZjQ1ZDNjYy4u
OTQwZDM5ZGUyNGFjZmQzMmQ5NmE0YWMyMWVkMmMyYTUzMTdjMjFjZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9w
SWZOZWNlc3NhcnlUaW1lcihWTSogdm0pCi0gICAgOiBIZWFwVGltZXIodm0pCisgICAgOiBCYXNl
KHZtKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9w
SWZOZWNlc3NhcnlUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVj
ZXNzYXJ5VGltZXIuaAppbmRleCBhNjgzMTg0NzQ4OWM4NmMzNmI2ODllMThkYTA0ODYzYTFlNGVl
NDQ1Li5lMTgzNmExNGM4ZWQ1MmEyNThmNDYyMDcyMzViMDU0YjljYTJhZWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKQEAgLTI1
LDE0ICsyNSwxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1lci5oIgor
I2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBI
ZWFwOwogCi1jbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lciA6IHB1YmxpYyBIZWFwVGltZXIgewor
Y2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVi
bGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKICAgICBleHBsaWNpdCBTdG9w
SWZOZWNlc3NhcnlUaW1lcihWTSopOwogICAgIAogICAgIHZvaWQgZG9Xb3JrKCkgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgKaW5kZXggNmI4MTk3
YzY4NjZhMDU5OTViMzJhODhiZTc5NDFkZDBmZDFiOTBhNi4uMjA1ZmIwNGZiNjkxNDdkOGZkNWU3
MmFlMTBhMDMyZDUxZTEzZDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Ryb25nSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGFkNGEzMTQwOGE2YjM1YjI5ZDNjNTRiOTFhMzY5MGU1
ZTUwMTBhNDcuLmRkNmNhZmQwNzdmZGExMmE1YmFjMzQ5YzJlNWM5NTUwNzY2N2JhOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlBy
b3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oIgogI2lu
Y2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKQEAgLTczLDggKzc0LDkgQEAKICNpbmNsdWRlICJU
ZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRl
ICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2FzbVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBsYW5JbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5o
PgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC05MDcsOCArOTA5LDggQEAgY29uc3QgQ2xhc3NJbmZv
IERPTUpJVEdldHRlckNvbXBsZXg6OnNfaW5mbyA9IHsgIkRPTUpJVEdldHRlckNvbXBsZXgiLCAm
QmFzZTo6c18KIGNvbnN0IENsYXNzSW5mbyBET01KSVRGdW5jdGlvbk9iamVjdDo6c19pbmZvID0g
eyAiRE9NSklURnVuY3Rpb25PYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKERPTUpJVEZ1bmN0aW9uT2JqZWN0KSB9OwogY29uc3QgQ2xhc3NJbmZvIFJ1
bnRpbWVBcnJheTo6c19pbmZvID0geyAiUnVudGltZUFycmF5IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShSdW50aW1lQXJyYXkpIH07CiBjb25zdCBDbGFzc0lu
Zm8gU2ltcGxlT2JqZWN0OjpzX2luZm8gPSB7ICJTaW1wbGVPYmplY3QiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNpbXBsZU9iamVjdCkgfTsKLXN0YXRpYyBi
b29sIHRlc3QyNjJBc3luY1Bhc3NlZCB7IGZhbHNlIH07Ci1zdGF0aWMgYm9vbCB0ZXN0MjYyQXN5
bmNUZXN0IHsgZmFsc2UgfTsKK3N0YXRpYyB1bnNpZ25lZCBhc3luY1Rlc3RQYXNzZXMgeyAwIH07
CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgeyAwIH07CiAKIEVsZW1l
bnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewpAQCAtMTA3Nyw2ICsxMDc5
LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGlu
Z1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXQKICNlbmRpZgogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKTsKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5bmNUZXN0U3RhcnQo
RXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkFzeW5jVGVzdFBhc3NlZChFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1
bGVGdW5jdGlvbnMoRXhlY1N0YXRlKik7CkBAIC0xMzQ5LDYgKzEzNTMsOSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJtYXhBcmd1bWVudHMiLCBmdW5jdGlvbk1heEFy
Z3VtZW50cywgMCk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RTdGFydCIs
IGZ1bmN0aW9uQXN5bmNUZXN0U3RhcnQsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFz
eW5jVGVzdFBhc3NlZCIsIGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkLCAxKTsKKwogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJ0ZXN0V2FzbU1vZHVsZUZ1
bmN0aW9ucyIsIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMsIDApOwogI2VuZGlmCkBA
IC0xNzMyLDExICsxNzM5LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgRklMRSogb3V0KQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHRlc3Qy
NjJBc3luY1Rlc3QpIHsKKyAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMpIHsKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgICAgICBpZiAodmFsdWUu
aXNTdHJpbmcoKSAmJiBXVEY6OmVxdWFsKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykuaW1w
bCgpLCAiVGVzdDI2MjpBc3luY1Rlc3RDb21wbGV0ZSIpKQotICAgICAgICAgICAgdGVzdDI2MkFz
eW5jUGFzc2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkgJiYgV1RGOjplcXVhbChhc1N0
cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRlc3QyNjI6QXN5bmNUZXN0Q29tcGxl
dGUiKSkgeworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VzKys7CisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7
CkBAIC0zMDQ5LDYgKzMwNTcsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoSlNDOjptYXhBcmd1bWVudHMpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEpTVmFsdWUgbnVtYmVyT2ZBc3luY1Bhc3NlcyA9IGV4ZWMtPmFyZ3VtZW50
KDApOworICAgIGlmICghbnVtYmVyT2ZBc3luY1Bhc3Nlcy5pc1VJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkV4cGVjdGVkIGZp
cnN0IGFyZ3VtZW50IHRvIGEgdWludDMyIikpOworCisgICAgYXN5bmNUZXN0RXhwZWN0ZWRQYXNz
ZXMgKz0gbnVtYmVyT2ZBc3luY1Bhc3Nlcy5hc1VJbnQzMigpOworICAgIHJldHVybiBlbmNvZGVk
SlNVbmRlZmluZWQoKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkFzeW5jVGVzdFBhc3NlZChFeGVjU3RhdGUqKQoreworICAgIGFzeW5jVGVzdFBhc3NlcysrOwor
ICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKK30KKwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAogc3RhdGljIENTdHJpbmcgdmFsdWVXaXRoVHlwZU9mV2FzbVZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHdhc21WYWx1ZSkKQEAgLTMx
NTksMjEgKzMxODYsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqIGUKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IGZ1bmN0aW9uQ291bnQgKyAyKQogICAgICAgICBDUkFTSCgpOwog
Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+
dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpKTsKLSAgICBwbGFuLnJ1bigpOwotICAgIGlmIChw
bGFuLmZhaWxlZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIG1vZHVs
ZTogIiwgcGxhbi5lcnJvck1lc3NhZ2UoKSk7CisgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBh
ZG9wdFJlZigqbmV3IFdhc206OlBsYW4odm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2Ut
PnZlY3RvcigpKSwgc291cmNlLT5sZW5ndGgoKSwgV2FzbTo6UGxhbjo6RnVsbENvbXBpbGUsIFdh
c206OlBsYW46OmRvbnRGaW5hbGl6ZSkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5x
dWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4uZ2V0KCkpOworICAgIGlmIChwbGFuLT5mYWlsZWQoKSkg
eworICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBsYW4tPmVy
cm9yTWVzc2FnZSgpKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpZiAocGxhbi5p
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQorICAgIGlmIChwbGFuLT5p
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQogICAgICAgICBDUkFTSCgp
OwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgY2FsbGVlczsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBrZWVwQWxpdmU7CiAgICAgewogICAgICAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBV
SU5UX01BWDsKLSAgICAgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksCisgICAgICAgIHBsYW4tPmluaXRpYWxpemVDYWxsZWVzKAogICAgICAgICAg
ICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsZWVJbmRleCB8fCAoY2FsbGVl
SW5kZXggLSAxID09IGxhc3RJbmRleCkpOwogICAgICAgICAgICAgICAgIGNhbGxlZXMuYXBwZW5k
KGpzRW50cnlwb2ludENhbGxlZSk7CkBAIC0zMTgxLDcgKzMyMDksNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4
ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAg
ICAgICAgICAgfSk7CiAgICAgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5m
b3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeSk7CiAKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7CkBAIC0zNjY2LDcgKzM2OTQsNyBAQCB2b2lk
IENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItLXRlc3QyNjItYXN5bmMiKSkgewot
ICAgICAgICAgICAgdGVzdDI2MkFzeW5jVGVzdCA9IHRydWU7CisgICAgICAgICAgICBhc3luY1Rl
c3RFeHBlY3RlZFBhc3NlcysrOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApA
QCAtMzczOCw0OCArMzc2Niw2NCBAQCBpbnQgcnVuSlNDKENvbW1hbmRMaW5lIG9wdGlvbnMsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiAgICAgV29ya2VyIHdvcmtlcihXb3JrZXJzOjpzaW5nbGV0b24oKSk7
CiAgICAgCiAgICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKCZ2bSk7Ci0KICAgICBpbnQgcmVzdWx0OwotICAgIGlmIChv
cHRpb25zLm1fcHJvZmlsZSAmJiAhdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICB2
bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb2ZpbGVyOjpEYXRh
YmFzZT4odm0pOworICAgIGJvb2wgc3VjY2VzczsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxP
YmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVs
bCgpKSwgb3B0aW9ucy5tX2FyZ3VtZW50cyk7Ci0gICAgZ2xvYmFsT2JqZWN0LT5zZXRSZW1vdGVE
ZWJ1Z2dpbmdFbmFibGVkKG9wdGlvbnMubV9lbmFibGVSZW1vdGVEZWJ1Z2dpbmcpOwotICAgIGJv
b2wgc3VjY2VzcyA9IGZ1bmModm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKG9wdGlvbnMubV9p
bnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQotICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmpl
Y3QpOworICAgICAgICBpZiAob3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcikKKyAgICAgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8UHJvZmlsZXI6OkRhdGFiYXNlPih2bSk7CiAKLSAgICB2bS5kcmFpbk1pY3JvdGFz
a3MoKTsKLSAgICByZXN1bHQgPSBzdWNjZXNzICYmICh0ZXN0MjYyQXN5bmNUZXN0ID09IHRlc3Qy
NjJBc3luY1Bhc3NlZCkgPyAwIDogMzsKKyAgICAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGpzTnVsbCgpKSwgb3B0aW9ucy5tX2FyZ3VtZW50cyk7CisgICAgICAgIGdsb2JhbE9i
amVjdC0+c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVi
dWdnaW5nKTsKKyAgICAgICAgc3VjY2VzcyA9IGZ1bmModm0sIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKKyAgICAgICAgICAgIHJ1
bkludGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CisKKyAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tz
KCk7CisgICAgfQorI2lmIFVTRShDRikKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+cnVu
UnVuTG9vcCgpOworI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKQotICAgICAg
ICBwcmludGYoImpzYyBleGl0aW5nICVkXG4iLCByZXN1bHQpOworICAgIHJlc3VsdCA9IHN1Y2Nl
c3MgJiYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzID09IGFzeW5jVGVzdFBhc3NlcykgPyAwIDog
MzsKKworICAgIGlmIChvcHRpb25zLm1fZXhpdENvZGUpIHsKKyAgICAgICAgcHJpbnRmKCJqc2Mg
ZXhpdGluZyAlZCIsIHJlc3VsdCk7CisgICAgICAgIGlmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3Nl
cyAhPSBhc3luY1Rlc3RQYXNzZXMpCisgICAgICAgICAgICBwcmludGYoIiBiZWNhdXNlIGV4cGVj
dGVkOiAlZCBhc3luYyB0ZXN0IHBhc3NlcyBidXQgZ290OiAlZCBhc3luYyB0ZXN0IHBhc3NlcyIs
IGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzLCBhc3luY1Rlc3RQYXNzZXMpOworICAgICAgICBwcmlu
dGYoIlxuIik7CisgICAgfQogCiAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlKSB7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgICAgICBpZiAoIXZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmlsZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBzYXZlIHByb2ZpbGVyIG91dHB1
dC5cbiIpOwogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUV4
Y2VwdGlvbkZ1enooKSkKLSAgICAgICAgcHJpbnRmKCJKU0MgRVhDRVBUSU9OIEZVWlo6IGVuY291
bnRlcmVkICV1IGNoZWNrcy5cbiIsIG51bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrcygpKTsKLSAg
ICBib29sIGZpcmVBdEVuYWJsZWQgPQotICAgIE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enpBdCgpIHx8IE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdE9y
QWZ0ZXIoKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkg
JiYgKCFmaXJlQXRFbmFibGVkIHx8IE9wdGlvbnM6OnZlcmJvc2VFeGVjdXRhYmxlQWxsb2NhdGlv
bkZ1enooKSkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYRUNVVEFCTEUgQUxMT0NBVElPTiBGVVpa
OiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ekNoZWNrcygpKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKSkgewotICAg
ICAgICBwcmludGYoIkpTQyBPU1IgRVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAldSBzdGF0aWMgY2hl
Y2tzLlxuIiwgbnVtYmVyT2ZTdGF0aWNPU1JFeGl0RnV6ekNoZWNrcygpKTsKLSAgICAgICAgcHJp
bnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgZHluYW1pYyBjaGVja3MuXG4i
LCBudW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKCkpOwotICAgIH0KLQotICAgIGF1dG8gY29tcGls
ZVRpbWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpOwotICAgIFZlY3RvcjxDU3RyaW5n
PiBjb21waWxlVGltZUtleXM7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGNvbXBpbGVUaW1lU3Rh
dHMpCi0gICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsKLSAgICBzdGQ6
OnNvcnQoY29tcGlsZVRpbWVLZXlzLmJlZ2luKCksIGNvbXBpbGVUaW1lS2V5cy5lbmQoKSk7Ci0g
ICAgZm9yIChDU3RyaW5nIGtleSA6IGNvbXBpbGVUaW1lS2V5cykKLSAgICAgICAgcHJpbnRmKCIl
NDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5KSk7
CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVYQ0VQ
VElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1
enpDaGVja3MoKSk7CisgICAgICAgIGJvb2wgZmlyZUF0RW5hYmxlZCA9CisgICAgICAgIE9wdGlv
bnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdCgpIHx8IE9wdGlvbnM6OmZpcmVFeGVj
dXRhYmxlQWxsb2NhdGlvbkZ1enpBdE9yQWZ0ZXIoKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmlyZUF0RW5hYmxlZCB8fCBPcHRpb25z
Ojp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkpKQorICAgICAgICAgICAgcHJpbnRm
KCJKU0MgRVhFQ1VUQUJMRSBBTExPQ0FUSU9OIEZVWlo6IGVuY291bnRlcmVkICV1IGNoZWNrcy5c
biIsIG51bWJlck9mRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tzKCkpOworICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKSkgeworICAgICAgICAgICAgcHJpbnRmKCJKU0Mg
T1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIsIG51bWJlck9m
U3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7CisgICAgICAgICAgICBwcmludGYoIkpTQyBPU1Ig
RVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAldSBkeW5hbWljIGNoZWNrcy5cbiIsIG51bWJlck9mT1NS
RXhpdEZ1enpDaGVja3MoKSk7CisgICAgICAgIH0KKworICAgICAgICAKKyAgICAgICAgYXV0byBj
b21waWxlVGltZVN0YXRzID0gSklUOjpjb21waWxlVGltZVN0YXRzKCk7CisgICAgICAgIFZlY3Rv
cjxDU3RyaW5nPiBjb21waWxlVGltZUtleXM7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBj
b21waWxlVGltZVN0YXRzKQorICAgICAgICAgICAgY29tcGlsZVRpbWVLZXlzLmFwcGVuZChlbnRy
eS5rZXkpOworICAgICAgICBzdGQ6OnNvcnQoY29tcGlsZVRpbWVLZXlzLmJlZ2luKCksIGNvbXBp
bGVUaW1lS2V5cy5lbmQoKSk7CisgICAgICAgIGZvciAoQ1N0cmluZyBrZXkgOiBjb21waWxlVGlt
ZUtleXMpCisgICAgICAgICAgICBwcmludGYoIiU0MHM6ICUuM2xmIG1zXG4iLCBrZXkuZGF0YSgp
LCBjb21waWxlVGltZVN0YXRzLmdldChrZXkpKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChP
cHRpb25zOjpnY0F0RW5kKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAppbmRleCA2OTY3ZTAzYWZlMTU0MjQ0ZDFlMmQwY2Iw
M2E0NjEwODk0MDUwMWQ1Li4xZGEwNjAxZjg5NzhlMTBmZjg5M2NhMzFlMWIzZThmYmRkMjUyYzZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVm
ZXJyZWQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtOTksMTEgKzEwMCwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2FsbEZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNWYWx1ZSB2YWx1ZQogdm9pZCBKU1By
b21pc2VEZWZlcnJlZDo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIG1fcmVzb2x2ZS5nZXQoKSwgdmFsdWUpOworICAgIGJv
b2wgd2FzUGVuZGluZyA9IGV4ZWMtPnZtKCkucHJvbWlzZURlZmVycmVkVGltZXItPmNhbmNlbFBl
bmRpbmdQcm9taXNlKHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQod2FzUGVuZGluZywgd2FzUGVu
ZGluZyA9PSBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyk7CiB9CiAKIHZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVhc29uKQogewogICAgIGNh
bGxGdW5jdGlvbihleGVjLCBtX3JlamVjdC5nZXQoKSwgcmVhc29uKTsKKyAgICBib29sIHdhc1Bl
bmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJv
bWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0g
bV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIHJlYXNvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCmluZGV4IDI2ZjRhODJk
MDhjYTAyMjBlZGQ1MTk2ODUyOTgyMmJjYWI5YWM2ZmQuLjA5MjJhOTRkOTMzY2NlYzU5YTRhMTdm
Y2JkMjJjMzcyM2RhNTBjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlRGVmZXJyZWQuaApAQCAtNTYsNiArNTYsMTAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopOwogCisj
aWZuZGVmIE5ERUJVRworICAgIHZvaWQgcHJvbWlzZUFzeW5jUGVuZGluZygpIHsgbV9wcm9taXNl
SXNBc3luY1BlbmRpbmcgPSB0cnVlOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIEpTUHJv
bWlzZURlZmVycmVkKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CkBAIC02NCw2ICs2OCwxMCBAQCBwcm90
ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEpTUHJvbWlzZURlZmVycmVkKFZNJik7CiAKKyNpZm5kZWYg
TkRFQlVHCisgICAgYm9vbCBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyB7IGZhbHNlIH07CisjZW5k
aWYKKwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9wcm9taXNlOwogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtX3Jlc29sdmU7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVq
ZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29w
VGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFmYzEzOTFhNjYyNmIzODhmMTRlMTgyYzcyYWFlM2NlNmI3NmU4NDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxv
b3BUaW1lci5jcHAKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNSdW5Mb29wVGltZXIuaCIKKworI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShH
TElCKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IFVTRShDRikKKworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgSlNSdW5Mb29wVGltZXI6OnNfZGVjYWRl
ID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CisKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BU
aW1lcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9j
aygpKQoreworICAgIHNldFJ1bkxvb3Aodm0tPmhlYXAucnVuTG9vcCgpKTsKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKK3sKKyAgICBp
ZiAobV9ydW5Mb29wKSB7CisgICAgICAgIENGUnVuTG9vcFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5n
ZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICAgICAgQ0ZS
dW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOworICAgICAgICBtX3J1bkxvb3Au
Y2xlYXIoKTsKKyAgICAgICAgbV90aW1lci5jbGVhcigpOworICAgIH0KKworICAgIGlmIChydW5M
b29wKSB7CisgICAgICAgIG1fcnVuTG9vcCA9IHJ1bkxvb3A7CisgICAgICAgIG1lbXNldCgmbV9j
b250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGltZXJDb250ZXh0KSk7CisgICAgICAgIG1fY29u
dGV4dC5pbmZvID0gdGhpczsKKyAgICAgICAgbV90aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGlt
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
KyBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAsIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUs
ICZtX2NvbnRleHQpKTsKKyAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgp
LCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIH0KK30KKworSlNS
dW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcigpCit7CisgICAgc2V0UnVuTG9vcCgwKTsKK30K
Kwordm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2
b2lkKiBjb250ZXh0UHRyKQoreworICAgIEpTUnVuTG9vcFRpbWVyKiB0aW1lciA9IHN0YXRpY19j
YXN0PEpTUnVuTG9vcFRpbWVyKj4oY29udGV4dFB0cik7CisgICAgdGltZXItPm1fYXBpTG9jay0+
bG9jaygpOworCisgICAgUmVmUHRyPFZNPiB2bSA9IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7Cisg
ICAgaWYgKCF2bSkgeworICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3
ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgICAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2so
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bS5nZXQoKSk7CisgICAgICAgIHRpbWVyLT5kb1dvcmsoKTsKKyAgICB9CisKKyAg
ICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6
c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgQ0ZSdW5Mb29w
VGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJy
ZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9
CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAgICBDRlJ1bkxvb3BU
aW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSArIHNfZGVjYWRlKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gZmFsc2U7Cit9CisKKyNlbGlm
IFVTRShHTElCKQorCitjb25zdCBsb25nIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICog
NjAgKiAyNCAqIDM2NSAqIDEwOworCitzdGF0aWMgR1NvdXJjZUZ1bmNzIEpTUnVuTG9vcFRpbWVy
U291cmNlRnVuY3Rpb25zID0geworICAgIG51bGxwdHIsIC8vIHByZXBhcmUKKyAgICBudWxscHRy
LCAvLyBjaGVjaworICAgIC8vIGRpc3BhdGNoCisgICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5j
IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAg
IHJldHVybiBjYWxsYmFjayh1c2VyRGF0YSk7CisgICAgfSwKKyAgICBudWxscHRyLCAvLyBmaW5h
bGl6ZQorICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKKyAgICBudWxscHRyLCAvLyBj
bG9zdXJlX21hcnNoYWxsCit9OworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0q
IHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKKyAg
ICAsIG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmSlNSdW5Mb29wVGltZXJTb3VyY2VG
dW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpKQoreworICAgIGdfc291cmNlX3NldF9uYW1lKG1f
dGltZXIuZ2V0KCksICJbSmF2YVNjcmlwdENvcmVdIEpTUnVuTG9vcFRpbWVyIik7CisgICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAt
PiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8mIHJ1bkxvb3BUaW1lciA9ICpzdGF0aWNfY2FzdDxK
U1J1bkxvb3BUaW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3Rp
bWUocnVuTG9vcFRpbWVyLm1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBK
U1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgICAgIHJ1bkxv
b3BUaW1lci50aW1lckRpZEZpcmUoKTsKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVF
OworICAgIH0sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyLmdl
dCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK0pTUnVuTG9v
cFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIGdfc291cmNlX2Rlc3Ryb3kobV90aW1l
ci5nZXQoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSgpCit7Cisg
ICAgbV9hcGlMb2NrLT5sb2NrKCk7CisKKyAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkgeworICAg
ICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZl
IHVwLgorICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOworICAgICAgICBk
b1dvcmsoKTsKKyAgICB9CisKKyAgICBtX2FwaUxvY2stPnVubG9jaygpOworfQorCit2b2lkIEpT
UnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKK3sK
KyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9u
aWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgbV9p
c1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVy
KCkKK3sKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9t
b25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgbV9pc1Nj
aGVkdWxlZCA9IGZhbHNlOworfQorI2Vsc2UKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1l
cihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQoreworfQorCitKU1J1bkxvb3BUaW1lcjo6fkpTUnVu
TG9vcFRpbWVyKCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSgpCit7
Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlKQoreworfQor
Cit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cit9CisjZW5kaWYKKyAgICAK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSdW5Mb29wVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNlY2I5Y2JjNDNiODBkMzFlZjhiNmIwNDljMTdl
ZjVhYzRmY2I4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUnVuTG9vcFRpbWVyLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVG
b3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShHTElCKQorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNMb2NrOworY2xhc3MgVk07CisKK2NsYXNzIEpTUnVuTG9vcFRpbWVyIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpTUnVuTG9vcFRpbWVyPiB7CitwdWJsaWM6CisgICAgSlNS
dW5Mb29wVGltZXIoVk0qKTsKKyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIHZvaWQgdGltZXJEaWRG
aXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKik7CisjZW5kaWYKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgfkpTUnVuTG9vcFRpbWVyKCk7CisgICAgdmlydHVhbCB2b2lkIGRvV29y
aygpID0gMDsKKworICAgIHZvaWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29u
ZHMpOworICAgIHZvaWQgY2FuY2VsVGltZXIoKTsKKyAgICBib29sIGlzU2NoZWR1bGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NjaGVkdWxlZDsgfQorCisjaWYgVVNFKENGKQorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYpOworI2VuZGlmIC8vIFVTRShD
RikKKworcHJvdGVjdGVkOgorICAgIFZNKiBtX3ZtOworCisgICAgUmVmUHRyPEpTTG9jaz4gbV9h
cGlMb2NrOworICAgIGJvb2wgbV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07CisjaWYgVVNFKENGKQor
ICAgIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKKworICAgIFJldGFpblB0
cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVm
PiBtX3J1bkxvb3A7CisKKyAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OworCisg
ICAgTG9jayBtX3NodXRkb3duTXV0ZXg7CisjZWxpZiBVU0UoR0xJQikKKyAgICBzdGF0aWMgY29u
c3QgbG9uZyBzX2RlY2FkZTsKKyAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOworICAgIEdSZWZQdHI8
R1NvdXJjZT4gbV90aW1lcjsKKyNlbmRpZgorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGludmFs
aWRhdGUoKTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBkYTk5NmVhYTNjNmNjYjYwYmYxMDhiNjk5NzM4NDI2
ZjcxYTQ5NjdjLi5hMGQ5MTA5MGU2MmJjZGIyNjYxYzI4NmQzNDQ2NzI3YzkxNTE0ZTY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC0yNTIsNiArMjUyLDcgQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgbnVtYmVy
T2ZGVExDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoOCwgMikg
LSAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZERkdD
b21waWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAw
KSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mRlRMQ29t
cGlsZXJUaHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMiwgMCks
IE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZldhc21Db21w
aWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAwKSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlUHJvZmlsZXIsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlciwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkBAIC00MjgsNiArNDI5LDkgQEAgdHlw
ZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VDb2RlQ2FjaGUs
IHRydWUsIE5vcm1hbCwgIklmIGZhbHNlLCB0aGUgdW5saW5rZWQgYnl0ZSBjb2RlIGNhY2hlIHdp
bGwgbm90IGJlIHVzZWQuIikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5LCB0
cnVlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBvYmplY3QuIikgXAor
ICAgIFwKKyAgICB2KGJvb2wsIGZhaWxUb0NvbXBpbGVXZWJBc3NlbWJseUNvZGUsIGZhbHNlLCBO
b3JtYWwsICJJZiB0cnVlLCBubyBXYXNtOjpQbGFuIHdpbGwgc3VjZXNzZnVsbHkgY29tcGlsZSBh
IGZ1bmN0aW9uLiIpIFwKKyAgICBcCiAgICAgdihib29sLCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93
TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd29uJ3Qg
bW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5kIGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0
aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1i
bHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2Ug
YSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNo
ZWNrIHdhc20gbWVtb3J5LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdFRMUywg
dHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGZhc3QgdGhyZWFkLWxv
Y2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1l
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1l
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzRhZjY5MTc5YTJjMGFhZjg1YWFiOThiMWRhZGQwMmM4ODM3ODA3
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21p
c2VEZWZlcnJlZFRpbWVyLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgorCisjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQu
aCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworUHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJl
ZFRpbWVyKFZNJiB2bSkKKyAgICA6IEJhc2UoJnZtKQoreworfQorCit2b2lkIFByb21pc2VEZWZl
cnJlZFRpbWVyOjpkb1dvcmsoKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKKyAg
ICBjYW5jZWxUaW1lcigpOworICAgIGlmICghbV9ydW5UYXNrcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgd2hpbGUgKCFtX3Rhc2tzLmlzRW1wdHkoKSkgeworICAgICAgICBKU1Byb21pc2VEZWZl
cnJlZCogdGlja2V0OworICAgICAgICBUYXNrIHRhc2s7CisgICAgICAgIHN0ZDo6dGllKHRpY2tl
dCwgdGFzaykgPSBtX3Rhc2tzLnRha2VMYXN0KCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJEb2luZyB3b3JrIG9uIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAg
ICAgICAgLy8gV2UgbWF5IGhhdmUgYWxyZWFkeSBjYW5jZWxlZCB0aGVzZSBwcm9taXNlcy4KKyAg
ICAgICAgaWYgKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCkpIHsKKyAgICAgICAg
ICAgIHRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWljcm90YXNrcygpOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byB3YWl0aW5nVGFza3MgPSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRp
Y2tldCk7CisgICAgICAgIGZvciAoY29uc3QgVGFzayYgdW5ibG9ja2VkVGFzayA6IHdhaXRpbmdU
YXNrcykgeworICAgICAgICAgICAgdW5ibG9ja2VkVGFzaygpOworICAgICAgICAgICAgbV92bS0+
ZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBVU0UoQ0YpCisgICAg
aWYgKG1fcGVuZGluZ1Byb21pc2VzLmlzRW1wdHkoKSAmJiBtX3Nob3VsZFN0b3BSdW5Mb29wV2hl
bkFsbFByb21pc2VzRmluaXNoKQorICAgICAgICBDRlJ1bkxvb3BTdG9wKG1fcnVuTG9vcC5nZXQo
KSk7CisjZW5kaWYKK30KKworI2lmIFVTRShDRikKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6
OnJ1blJ1bkxvb3AoKQoreworICAgIEFTU0VSVCghbV92bS0+Y3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgQVNTRVJUKENGUnVuTG9vcEdldEN1cnJlbnQoKSA9PSBtX3J1bkxv
b3AuZ2V0KCkpOworICAgIG1fc2hvdWxkU3RvcFJ1bkxvb3BXaGVuQWxsUHJvbWlzZXNGaW5pc2gg
PSB0cnVlOworICAgIGlmIChtX3BlbmRpbmdQcm9taXNlcy5zaXplKCkpCisgICAgICAgIENGUnVu
TG9vcFJ1bigpOworfQorI2VuZGlmCisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OmFkZFBl
bmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFZlY3RvcjxTdHJvbmc8SlND
ZWxsPj4mJiBkZXBlbmRlbmNpZXMpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXBlbmRl
bmNpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIEFTU0VSVChkZXBlbmRlbmNpZXNbaV0uZ2V0KCkg
IT0gdGlja2V0KTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMuYWRkKHRp
Y2tldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PigpKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgcGVuZGluZyBw
cm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICBkZXBlbmRlbmNpZXMuYXBw
ZW5kKFN0cm9uZzxKU0NlbGw+KCptX3ZtLCB0aWNrZXQpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdURk1vdmUoZGVwZW5kZW5jaWVzKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQWRkaW5nIG5ldyBkZXBlbmRlbmNpZXMgZm9yIHByb21p
c2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kVmVjdG9yKGRlcGVuZGVuY2llcyk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRwor
ICAgIHRpY2tldC0+cHJvbWlzZUFzeW5jUGVuZGluZygpOworI2VuZGlmCit9CisKK2Jvb2wgUHJv
bWlzZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVk
KiB0aWNrZXQpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElM
b2NrKCkpOworICAgIGJvb2wgcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMucmVtb3ZlKHRpY2tl
dCk7CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ2Fu
Y2VsaW5nIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAgICBhdXRvIGJsb2Nr
ZWRUYXNrcyA9IG1fYmxvY2tlZFRhc2tzLnRha2UodGlja2V0KTsKKyAgICBmb3IgKGNvbnN0IFRh
c2smIHRhc2sgOiBibG9ja2VkVGFza3MpCisgICAgICAgIHRhc2soKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKEpT
UHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFRhc2smJiB0YXNrKQoreworICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fdGFza0xvY2spOworICAgIG1fdGFza3MuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZSh0
aWNrZXQsIFdURk1vdmUodGFzaykpKTsKKyAgICBpZiAoIWlzU2NoZWR1bGVkKCkpCisgICAgICAg
IHNjaGVkdWxlVGltZXIoMCk7Cit9CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVk
dWxlQmxvY2tlZFRhc2soSlNQcm9taXNlRGVmZXJyZWQqIGJsb2NraW5nVGlja2V0LCBUYXNrJiYg
dGFzaykKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKGJsb2NraW5nVGlja2V0
KSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Jsb2NrZWRUYXNrcy5hZGQoYmxvY2tpbmdUaWNrZXQs
IFZlY3RvcjxUYXNrPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZN
b3ZlKHRhc2spKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
YzNjMzNlYjg3MmRlMDA3ZDNhZjFmZGE4YWViMDdmOTUwNDQ0OTM2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgorI2luY2x1
ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNQcm9taXNlRGVmZXJyZWQ7CitjbGFzcyBWTTsKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3Mg
UHJvbWlzZURlZmVycmVkVGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgeworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKKworICAgIFByb21pc2VEZWZlcnJlZFRp
bWVyKFZNJik7CisKKyAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOworCisgICAgdm9pZCBhZGRQ
ZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4m
JiBkZXBlbmRlbmNpZXMpOworICAgIC8vIEpTUHJvbWlzZURlZmVycmVkIHNob3VsZCBoYW5kbGUg
Y2FuY2VsaW5nIHdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuCisgICAg
Ym9vbCBjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCopOworCisgICAgdHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gVGFzazsKKyAgICB2b2lkIHNjaGVkdWxlV29ya1Nv
b24oSlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrJiYpOworCisgICAgLy8gQmxvY2tlZCB0YXNrcyBz
aG91bGQgb25seSBiZSByZWdpc3RlcmVkIHdoaWxlIGhvbGRpbmcgdGhlIEpTIEFQSSBsb2NrLiBJ
ZiB3ZSBkaWRuJ3QgcmVxdWlyZSBob2xkaW5nIHRoZQorICAgIC8vIEpTIEFQSSBsb2NrIHRoZW4g
dGhlcmUgbWlnaHQgYmUgYSByYWNlIHdoZXJlIHRoZSBwcm9taXNlIHlvdSBhcmUgd2FpdGluZyBv
biBpcyBydW4gYmVmb3JlIHlvdXIgdGFzayBpcworICAgIC8vIHJlZ2lzdGVyZWQuCisgICAgdm9p
ZCBzY2hlZHVsZUJsb2NrZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAg
IHZvaWQgc3RvcFJ1bm5pbmdUYXNrcygpIHsgbV9ydW5UYXNrcyA9IGZhbHNlOyB9CisjaWYgVVNF
KENGKQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuUnVuTG9vcCgpOworI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgSGFzaE1hcDxKU1Byb21pc2VEZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8
SlNDZWxsPj4+IG1fcGVuZGluZ1Byb21pc2VzOworICAgIExvY2sgbV90YXNrTG9jazsKKyAgICBi
b29sIG1fcnVuVGFza3MgeyB0cnVlIH07CisjaWYgVVNFKENGKQorICAgIGJvb2wgbV9zaG91bGRT
dG9wUnVuTG9vcFdoZW5BbGxQcm9taXNlc0ZpbmlzaCB7IGZhbHNlIH07CisjZW5kaWYKKyAgICBW
ZWN0b3I8c3RkOjp0dXBsZTxKU1Byb21pc2VEZWZlcnJlZCosIFRhc2s+PiBtX3Rhc2tzOworICAg
IEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8VGFzaz4+IG1fYmxvY2tlZFRhc2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKaW5kZXggODUxMTU0MmI3N2RmYzhlNmYyYmVhYmYxZjg5M2M3NzM5YWI3NGIzOC4uZmVlMGIz
MzllZjI1NzJhNWFlZDExZGI4NmExMTE0YzQ0NmExOWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcApAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIlBhcnNlci5oIgogI2lu
Y2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1h
cEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCkBAIC0xMDMsNiArMTA0LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgi
CisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNs
dWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKQEAgLTE3
Nyw2ICsxNzksNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBjbGllbnREYXRhKDApCiAgICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKICAgICAs
IHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCisgICAgLCBwcm9taXNlRGVmZXJy
ZWRUaW1lcihzdGQ6Om1ha2VfdW5pcXVlPFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykpCiAg
ICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0
YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3RyaW5nVGFibGUpCiAgICAgLCBw
cm9wZXJ0eU5hbWVzKG51bGxwdHIpCiAgICAgLCBlbXB0eUxpc3QobmV3IEFyZ0xpc3QpCkBAIC0z
NTYsNiArMzU5LDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkK
IAogVk06On5WTSgpCiB7CisgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFz
a3MoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKFdhc206OmV4aXN0aW5nV29y
a2xpc3RPck51bGwoKSkKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxh
bnNGb3JWTSgqdGhpcyk7CisjZW5kaWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAg
ICAgICAgIG1fd2F0Y2hkb2ctPndpbGxEZXN0cm95Vk0odGhpcyk7CiAgICAgbV90cmFwcy53aWxs
RGVzdHJveVZNKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5ZDg2YWExOWE5
MzNjZWEzOGFiNWYwMjMxODQ0NTljYjYwMTBmM2I3Li44MWI4MmU5OWE5NGRlZGIzYzNhMWM3YzI2
MzY5ZjZiYzJmMjA5ODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwNiw2
ICsxMDYsNyBAQCBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsK
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Citj
bGFzcyBQcm9taXNlRGVmZXJyZWRUaW1lcjsKIGNsYXNzIFJlZ0V4cENhY2hlOwogY2xhc3MgUmVn
aXN0ZXI7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKQEAgLTM4MCw2ICszODEsNyBAQCBw
dWJsaWM6CiAgICAgc3RkOjpvbmNlX2ZsYWcgbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNl
RmxhZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb24+IG1f
d2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFBy
b21pc2VEZWZlcnJlZFRpbWVyPiBwcm9taXNlRGVmZXJyZWRUaW1lcjsKICAgICAKICAgICBKU0Nl
bGwqIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CiAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCBmY2RjOGNkZGM0
ZGE2OGRkOWRjZTE5OTBkOWQ5OTEyZWRkMjlkNjY4Li5iZmZlOGYzOTViZjA3YzQzZDVkZmFkOWZl
ZTYxZWEzYzNiOTY0YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dlYkFzc2VtYmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5LmNwcApAQCAtMzMsMTAgKzMzLDE3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIKIAordXNpbmcgSlNDOjpXYXNt
OjpQbGFuOworCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKEpTV2ViQXNzZW1ibHkpOwpAQCAtNDUsNDUgKzUyLDE2MCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSop
OwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4
ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3Rh
bnRpYXRlRnVuYyhFeGVjU3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlamVjdChF
eGVjU3RhdGUqIGV4ZWMsIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUsIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlKQoreworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNl
cHRpb24oKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBjYXRjaFNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgdHJ1bHkgYXN5bmNocm9ub3VzOgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTYKLSAgICBKU1Zh
bHVlIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsK
LSAgICB9CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZm
ZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBl
bmRlbmNpZXM7CisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgZ2xv
YmFsT2JqZWN0KSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9t
aXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxh
biA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3Nv
dXJjZSwgcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9t
aXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBwcm9t
aXNlLCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxlID0g
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5X
ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxh
bikpOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKLSAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7Cisg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgIH0pOwor
ICAgIH0pKTsKKworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBs
YW4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9
CiAKK2VudW0gY2xhc3MgUmVzb2x2ZSB7IFdpdGhJbnN0YW5jZSwgV2l0aE1vZHVsZUFuZEluc3Rh
bmNlIH07CitzdGF0aWMgdm9pZCByZXNvbHZlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGluc3RhbmNlLT5maW5hbGl6
ZUNyZWF0aW9uKHZtLCBleGVjKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChlbnRyaWVzID09IFJlc29sdmU6OldpdGhJbnN0YW5jZSkKKyAgICAgICAgcHJv
bWlzZS0+cmVzb2x2ZShleGVjLCBpbnN0YW5jZSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwo
Im1vZHVsZSIpKSwgbW9kdWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5j
ZSk7CisgICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU09iamVj
dCogaW1wb3J0T2JqZWN0LCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlh
bGx5IHJlY29tcGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQv
bWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgorICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2
bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBjYXNlczoK
KyAgICAvLyAxKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gaW5pdGlhbGl6ZWQgQ29kZUJs
b2NrLCBzbyB3ZSBoYXZlIG5vIG1vcmUgd29yayB0byBkby4KKyAgICAvLyAyKSBUaGUgaW5zdGFu
Y2UgaGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBhbmQgY29tcGlsZSB0
aGUgY29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIHVu
aW5pdGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyBzb21lb25lIGVsc2UgaXMgY29tcGlsaW5nIGNvZGUg
YW5kIHdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciB0aGVtLgorCisgICAgaWYgKGluc3RhbmNlLT5p
bml0aWFsaXplZCgpKSB7CisgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3Rh
bmNlLCBtb2R1bGUsIGVudHJpZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVj
dG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgLy8gVGhlIGluc3RhbmNlIGtl
ZXBzIHRoZSBtb2R1bGUgYWxpdmUuCisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlND
ZWxsPih2bSwgaW5zdGFuY2UpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVu
ZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKworICAgIGlmIChp
bnN0YW5jZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXIt
PnNjaGVkdWxlQmxvY2tlZFRhc2soaW5zdGFuY2UtPmNvZGVCbG9jaygpLT5wbGFuKCkucGVuZGlu
Z1Byb21pc2UoKSwgWyZ2bSwgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllc10gKCkg
eworICAgICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CisgICAgICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwg
bW9kdWxlLCBlbnRyaWVzKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMg
cmVwYXJzZXMgdGhlIG1vZHVsZSBoZWFkZXIsIHdoaWNoIHNob3VsZG4ndCBiZSBuZWNlc3Nhcnku
CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1vZHVsZS0+c291
cmNlKCksIFBsYW46OkZ1bGxDb21waWxlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50
cmllc10gKFBsYW4mIHApIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHAp
OworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtT
b29uKHByb21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzLCBwbGFuID0g
V1RGTW92ZShwbGFuKV0gKCkgeworICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOworICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgZW50cmllcyk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIGluc3Rh
bmNlLT5hZGRVbml0aWFsaXplZENvZGVCbG9jayh2bSwgcGxhbi5jb3B5UmVmKCkpOworICAgIHBs
YW4tPnNldE1vZGVBbmRQcm9taXNlKGluc3RhbmNlLT5tZW1vcnlNb2RlKCksIHByb21pc2UpOwor
ICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKK30KKwor
c3RhdGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0KiBp
bXBvcnRPYmplY3QpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJv
bVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CisKKyAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKKyAg
ICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsK
KyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwg
V1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBQbGFuKHZtLCAqc291cmNlLCBQbGFuOjpWYWxpZGF0aW9uLCBbc291cmNlLCBwcm9taXNl
LCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAg
ICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJv
bWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJv
bWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0
dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShzb3VyY2UpLCBwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21p
c2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBS
ZXNvbHZlOjpXaXRoTW9kdWxlQW5kSW5zdGFuY2UpOworICAgICAgICB9KTsKKyAgICB9KSk7CisK
KyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBj
YXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIEFQSSB0cnVseSBhc3luY2hyb25vdXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjkxODcKLQogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKLSAgICBhdXRvIHJlamVjdCA9IFsmXSAoKSB7Ci0gICAgICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlv
bik7Ci0gICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcHJvbWlz
ZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKLSAgICB9OwotCiAgICAgSlNWYWx1ZSBp
bXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICBpZiAoIWltcG9ydEFyZ3Vt
ZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkgewpAQCAtOTMsMjkgKzIxNSwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5j
KEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiAKICAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKLSAgICBKU1ZhbHVlIG1vZHVsZTsKLSAgICBib29sIGZpcnN0QXJn
dW1lbnRJc01vZHVsZSA9IGZhbHNlOwotICAgIGlmIChmaXJzdEFyZ3VtZW50LmluaGVyaXRzKHZt
LCBKU1dlYkFzc2VtYmx5TW9kdWxlOjppbmZvKCkpKSB7Ci0gICAgICAgIGZpcnN0QXJndW1lbnRJ
c01vZHVsZSA9IHRydWU7Ci0gICAgICAgIG1vZHVsZSA9IGZpcnN0QXJndW1lbnQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlTW9kdWxlKGV4ZWMsIGZpcnN0QXJndW1lbnQsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGlmIChjYXRjaFNjb3Bl
LmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgpOwotICAgIH0KLQotICAg
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKGV4ZWMsIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxl
Kj4obW9kdWxlKSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiByZWplY3QoKTsKLQotICAgIGlmIChmaXJzdEFyZ3VtZW50
SXNNb2R1bGUpCi0gICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgaW5zdGFuY2UpOwotICAg
IGVsc2UgewotICAgICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJtb2R1bGUiKSksIG1vZHVsZSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFs
KCJpbnN0YW5jZSIpKSwgaW5zdGFuY2UpOwotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMs
IHJlc3VsdCk7Ci0gICAgfQorICAgIGlmIChhdXRvKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZmlyc3RBcmd1bWVudCkpCisgICAgICAgIGluc3RhbnRp
YXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0
aEluc3RhbmNlKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVBbmRJbnN0YW50aWF0ZSh2bSwg
ZXhlYywgcHJvbWlzZSwgZmlyc3RBcmd1bWVudCwgaW1wb3J0T2JqZWN0KTsKIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKIH0KQEAgLTEyOSw3ICsyMzIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5j
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFz
ZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVP
ZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwg
Ynl0ZVNpemUpOworICAgIFdhc206OlBsYW4gcGxhbih2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5
dGVTaXplLCBQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUpOwogICAgIC8vIEZJ
WE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBk
ZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggZmFjNTdhZGRh
ZjA3NGU5YThjZmU2MDYzMzM1ZjMwZGEyZTk2ZDNhMi4uYWI3MjAwZWRkNTMwNGZhMmFjYmQ0OTlk
ODA1ZjNkMWQ5NmExNmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUg
KDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQ
cm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYpOworICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMjIx
LDYgKzIyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFByb2NlZHVy
ZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3RvcjxW
YXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMjU4LDkgKzI1OSwxMCBAQCBzdGF0aWMgdm9pZCBzdG9y
ZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBh
cmcpCiAgICAgICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2
bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBX
YXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUg
bW9kZSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZSht
b2RlKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC00ODYsNyArNDg4LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
IHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFz
ZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nKSB7CisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2lu
ZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNp
emVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50
ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CkBAIC01
MjIsNyArNTI0LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9w
KQogCiBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2Rl
IG1lbW9yeU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpCisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAg
ICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7CiAgICAgcmV0dXJuIG1lbW9yeU9wOwog
fQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVy
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW4KICAgICBqaXQu
cmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlv
bj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWdu
YXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWduZWQgb3B0TGV2ZWwp
CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0
TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPigpOwogCkBAIC0xMjM2LDcgKzEyMzgsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYg
dm0sCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtl
X3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwot
ICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0
KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQo
dm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKCZ2bSwg
Y29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbywg
bW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAyNDlkNTc4MTRhOTI4
YzRiZjkyMDZiYzg1MjU2NGMzNmM3ODg5YTRlLi5kZTU2YTFjM2IyM2M1NzA0ZmUwNTMxOWJkMGE4
NWMzMWU3N2Y5YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
ICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9pZCBk
dW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0aW9u
Q29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5
cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3Rv
cjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25z
dCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlNb2Rl
LCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3YTY3MjlhNzFm
YmRmMDUxNzRhMWNjYzExYTU2ZjYyNzFkY2ViYy4uNTU2OTQzNWY0MTJlNjZhNmQ3NDhjMzM1OGJi
ZDE1MzUxY2U1MjI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApA
QCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5n
KEV4dGVybmFsS2luZCBraW5kKQogfQogCiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBJZGVudGlmaWVy
IG1vZHVsZTsKLSAgICBJZGVudGlmaWVyIGZpZWxkOworICAgIFN0cmluZyBtb2R1bGU7CisgICAg
U3RyaW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJ
bmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgog
fTsKIAogc3RydWN0IEV4cG9ydCB7Ci0gICAgSWRlbnRpZmllciBmaWVsZDsKKyAgICBTdHJpbmcg
ZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWduZWQga2luZEluZGV4OyAv
LyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQuCiB9OwpAQCAt
MjYwLDYgKzI2MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAg
dWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
cy5zaXplKCk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggZjJiOTQxMTVj
YjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUzN2M3M2JhMi4uZDQyMDU2MGI3MjRlNGI0NjU1ZDI2YWFj
Y2M3ZDRjZTIxYWQ0Y2E3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2FscyksICJjYW4ndCBnZXQgRnVuY3Rpb24ncyBu
dW1iZXIgb2YgbG9jYWxzIGluIGdyb3VwICIsIGkpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG51bWJlck9mTG9jYWxzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAiLCBpLCAidGggbG9jYWwgZ3JvdXAgY291bnQgaXMgdG9v
IGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSwgImNhbid0IGdldCBGdW5jdGlvbiBsb2NhbCdzIHR5
cGUgaW4gZ3JvdXAgIiwgaSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4
dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgYWRkICIsIG51
bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9uIGxvY2FscyBmcm9tIGdyb3VwICIsIGkpOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZM
b2NhbHMpKTsKICAgICB9CiAKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQm9k
eSgpKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVpbnQz
Ml90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBm
b3IgZ2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5n
ZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2NhbCBhdCBpbmRleCIsIGluZGV4
KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5kZXgsIHJlc3Vs
dCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4n
dCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIG1fY29udGV4dC5zZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKICAgICBjYXNlIENhbGw6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaAppbmRleCBkMTNkMGM2NjJmOTg5ZDNlZGU0ZTRkZTA5ZjIyNDZjYzc5NzY2YTli
Li40NGRhMGRmYzE3ODRkZGY1YzAwZDdiYjU5NDYzMDZhZTYwYTJiMjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFZNOwog
bmFtZXNwYWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9k
ZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5Mwot
ZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Qg
ewogICAgIEJvdW5kc0NoZWNraW5nLAogICAgIFNpZ25hbGluZywKICAgICBOdW1iZXJPZk1lbW9y
eU1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcAppbmRleCA4YWMwODY2Mjc4YjUxMzkzYjY2OWVhMDlhN2I1NDhkNmQ5YTc2
YjE0Li41OTA5ZmUzZmU4M2MxODgyODkyNTQzNGRlNjU2YWRhYTAxNDE3NzJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3RlckluZm8o
VmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0KIAotTWVtb3J5
SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1v
ZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24o
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KQogICAg
IDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1f
aXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04MiwyOCArODIsNiBAQCBNZW1vcnlJbmZvcm1hdGlvbjo6
TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdQogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0
aGlzKTsKLQotICAgIGlmICghcmVjb21waWxlTW9kZSkgewotICAgICAgICBpZiAoIWlzSW1wb3J0
KSB7Ci0gICAgICAgICAgICBpZiAobWF4aW11bSAmJiBtYXhpbXVtLmJ5dGVzKCkgPT0gMCkgewot
ICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5p
dGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKSk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11bSgpLmJ5dGVzKCkgPT0g
MCk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9y
ZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1v
cnlNb2RlOjpTaWduYWxpbmcpOwotICAgICAgICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1vcnkpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9yeSk7Ci0gICAgICAgICAg
ICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX21vZGUgPSBNZW1v
cnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fbW9kZSA9ICpy
ZWNvbXBpbGVNb2RlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA2
ZGUwNzBhMTA0NTJmZjZiYjNjNWMyNTA0MTFmMTBlOTEzODllNGEyLi5kMTgyYzczY2Q2NTM4OGNh
ZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMjIgKzU0LDE3IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRp
b24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9u
YWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9uKFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CiAKICAg
ICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBh
Z2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgYm9vbCBo
YXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KLSAg
ICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNlcnZl
ZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9Ci0gICAgTWVt
b3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0ltcG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2YXRlOgotICAgIFJl
ZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7
IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5TW9kZSBtX21vZGUg
eyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZh
bHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1ZmQzZTRjM2Qu
LmU3MzZiYmYyZjE3MzJhZTI4NDg0NGYzNGUyOTk4ODMzY2I4Njg1MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0xNjIsMTEgKzE2
MiwxMSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0
CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBs
ZW5ndGgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmco
bW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCdzIG1vZHVsZSBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4pOwotICAgICAgICBp
bXAubW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVTdHJpbmcpOwor
ICAgICAgICBpbXAubW9kdWxlID0gbW9kdWxlU3RyaW5nOwogCiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUgJyIsIG1vZHVs
ZVN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhT
dHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIs
ICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4sICIgaW4gbW9k
dWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIGltcC5maWVsZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBpbXAuZmllbGQgPSBm
aWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFs
S2luZChpbXAua2luZCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3Mg
a2luZCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOwogICAgICAgICBzd2l0Y2ggKGltcC5raW5kKSB7CkBAIC0zMTYsNyArMzE2LDcgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJUKCFt
YXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7
CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3Zt
LCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0KTsK
KyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQ
YWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9Owog
fQogCkBAIC0zNzYsNyArMzc2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRG
OFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJl
ciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVsZFN0cmluZyks
ICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIGV4cG9y
dE5hbWVzLmFkZChmaWVsZFN0cmluZyk7Ci0gICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBleHAuZmllbGQgPSBmaWVs
ZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2lu
ZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2lu
ZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnRO
dW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5k
ZXggYzk2MThiNTdjYTQyMmYwMWZlOWY3OWY0YzE3OTUxYTBlYjZiNzUwZS4uNTBhMjg5MzVlZjEz
Zjk2MjBmYTE1Njg0MTc2YjE3ZTg0ZDY2YzJiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtNDQsOSArNDQsOSBAQCBzdHJ1Y3QgTW9kdWxl
UGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8TW9kdWxl
UGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25z
dCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0aW9u
YWw8TWVtb3J5TW9kZT4gbW9kZSkKKworICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICAgICAgOiBQYXJz
ZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgICAgICAsIG1fbW9kZShtb2Rl
KQogICAgIHsKICAgICB9CiAKQEAgLTY2LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRf
dCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtX21vZGUgeyBzdGQ6Om51bGxvcHQg
fTsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGI2NTQyNDkyNjQ4MTBhZmUwOWExNzA5OTUwNGY1
NjMwYmY4NjVjYzYuLjFlZDJiMmY4NTM2NTlmYTI3MmVkZGUwMTFhOThlYjYwYmM0OGViOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTQyLDcgKzQyLDYgQEAK
ICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFj
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTAsMzAgKzQ5
LDY1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi1QbGFuOjpQbGFuKFZNKiB2bSwgVmVjdG9yPHVp
bnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXpl
KCkpCisKK1BsYW46OlBsYW4oVk0mIHZtLCBBcnJheUJ1ZmZlciYgc291cmNlLCBBc3luY1dvcmsg
d29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogUGxhbih2bSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlLmRhdGEoKSksIHNvdXJjZS5ieXRlTGVuZ3RoKCksIHdvcmss
IFdURk1vdmUodGFzaykpCit7Cit9CisKK1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhf
dD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6
IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCksIHdvcmssIFdURk1vdmUodGFz
aykpCiB7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNp
emVfdCBzb3VyY2VMZW5ndGgpCitQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCogc291
cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2sm
JiB0YXNrKQogICAgIDogbV92bSh2bSkKKyAgICAsIG1fY29tcGxldGlvblRhc2sodGFzaykKICAg
ICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkK
KyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCit7Cit9CisKK2NvbnN0IGNoYXIqIFBsYW46OnN0YXRl
U3RyaW5nKFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFN0
YXRlOjpJbml0aWFsOiByZXR1cm4gIkluaXRpYWwiOworICAgIGNhc2UgU3RhdGU6OlZhbGlkYXRl
ZDogcmV0dXJuICJWYWxpZGF0ZWQiOworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOiByZXR1cm4g
IlByZXBhcmVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21waWxlZDogcmV0dXJuICJDb21waWxlZCI7
CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxldGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGxhbjo6bW92ZVRv
U3RhdGUoU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID4gbV9zdGF0ZSk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIm1vdmluZyB0byBzdGF0ZTogIiwgc3RhdGVTdHJpbmcoc3Rh
dGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKG1fc3RhdGUpKTsKKyAgICBtX3N0YXRl
ID0gc3RhdGU7Cit9CisKK3ZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
ImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOworICAgIG1fZXJyb3JNZXNz
YWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGNvbXBsZXRlKGxvY2tlcik7CiB9CiAK
LWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+IHJlY29tcGlsZU1vZGUpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQog
eworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygp
KQogICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAg
ICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VM
ZW5ndGgsIHJlY29tcGlsZU1vZGUpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2Vy
KCZtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBhdXRvIHBhcnNlUmVz
dWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsK
LSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAgICAg
ICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigp
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9tb2R1
bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBAIC04Miw1MiAr
MTE2LDQ4IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5LnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQgZW5k
aW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQp
OworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFy
dGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3Rh
cnQsICIgYW5kIGVuZGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rp
b25JbmRleF0uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1f
c291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7
CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3Vy
Y2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25h
dHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1
bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICpt
X21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWdu
YXR1cmVJbmRpY2VzKTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVG
dW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
Km1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNp
Z25hdHVyZUluZGljZXMpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSksICIs
ICIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3Io
KSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRl
eCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICBmYWlsKGhv
bGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAv
LyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRD
b21waWxlVGltZXMoKSkKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1l
Ojpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9k
dWxlIik7CisgICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNvbXBs
ZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgIGVsc2UKKyAgICAgICAgbW92ZVRvU3RhdGUoU3Rh
dGU6OlZhbGlkYXRlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFdlIGFyZSBjcmVhdGlu
ZyBhIGJ1bmNoIG9mIHRocmVhZHMgdGhhdCB0b3VjaCB0aGUgbWFpbiB0aHJlYWQncyBzdGFjay4g
VGhpcyB3aWxsIG1ha2UgQVNBTiB1bmhhcHB5LgotLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9LIGlz
IHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGludWUg
dW50aWwgYWxsIHRocmVhZHMKLS8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBkb25l
IGV4ZWN1dGluZy4KLVNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUoKQogewotICAg
IGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShyZWNvbXBpbGVNb2RlKSkKLSAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAgVHJhY2VTY29w
ZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJseUNvbXBpbGVF
bmQpOwogCi0gICAgaWYgKHJlY29tcGlsZU1vZGUpCi0gICAgICAgIEFTU0VSVChtX21vZHVsZUlu
Zm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpID09IHJlY29tcGlsZU1vZGUpOwotCiAgICAgYXV0byB0
cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNv
bnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNpemUpKSkgewogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwog
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91
Z2ggc3BhY2UgZm9yICIpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6ZSk7
CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgZmFpbChob2xkTG9jayht
X2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDEzMSArMTc4LDE1MyBAQCB2
b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAg
ICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0g
bV93YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBvcnRG
dW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0LT5maWVsZCk7
CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlv
biBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgaW1wb3J0LT5tb2R1bGUsICI6
ICIsIGltcG9ydC0+ZmllbGQpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5h
dChpbXBvcnQtPmtpbmRJbmRleCk7Ci0gICAgICAgIG1fd2FzbUV4aXRTdHVicy51bmNoZWNrZWRB
cHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IobV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJ
bmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBtX3dhc21FeGl0U3R1YnMudW5j
aGVja2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKCZtX3ZtLCBtX2NhbGxMaW5rSW5mb3MsIHNp
Z25hdHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CiAgICAgfQogCi0gICAgbV9jdXJy
ZW50SW5kZXggPSAwOworICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7Cit9CiAKLSAg
ICBhdXRvIGRvV29yayA9IFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAo
bV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9
IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7Ci0gICAg
ICAgICAgICB9CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBob3JlIGNsYXNzLi4uIGFuZCB0aGlz
IGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xhc3MgUGxhbjo6VGhyZWFkQ291bnRI
b2xkZXIgeworcHVibGljOgorICAgIFRocmVhZENvdW50SG9sZGVyKFBsYW4mIHBsYW4pCisgICAg
ICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bs
YW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7Cisg
ICAgfQogCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3Vy
Y2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAg
ICAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1f
c291cmNlTGVuZ3RoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUo
KSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAg
ICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0
dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKLQotICAgICAgICAgICAgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPigpOwotICAgICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbklu
ZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1f
bW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwotCi0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBj
b21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2Ug
dGhlIGZpcnN0LgotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJp
bmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFu
IEV4cGVjdGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJ
bmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICB+VGhyZWFkQ291
bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9j
ayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwogCi0gICAgICAg
ICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJtaW5hdGUgb24gdGhlIG5leHQgZXhlY3V0aW9uLgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX3Bs
YW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICBtX3BsYW4uY29tcGxldGUo
bG9ja2VyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKLSAgICAgICAg
fQotICAgIH07CisgICAgUGxhbiYgbV9wbGFuOworfTsKIAotICAgIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygp
KQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK3ZvaWQgUGxhbjo6
Y29tcGlsZUZ1bmN0aW9ucygpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBh
cmVkKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsK
IAotICAgIHVpbnQzMl90IHRocmVhZENvdW50ID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgp
ID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgOiAxOwotICAgIHVpbnQzMl90IG51bVdv
cmtlclRocmVhZHMgPSB0aHJlYWRDb3VudCAtIDE7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtV29ya2VyVGhyZWFk
cyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykK
LSAgICAgICAgdGhyZWFkcy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlVGhyZWFkKCJqc2Mud2FzbS1i
My1jb21waWxhdGlvbi50aHJlYWQiLCBkb1dvcmspKTsKKyAgICBpZiAobV9zdGF0ZSA+PSBTdGF0
ZTo6Q29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBUaHJlYWRDb3VudEhvbGRlciBob2xk
ZXIoKnRoaXMpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXg7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgKyttX2N1cnJlbnRJ
bmRleDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNv
bXBpbGVkKTsKKyAgICAgICAgfQogCi0gICAgZG9Xb3JrKCk7IC8vIExldCB0aGUgbWFpbiB0aHJl
YWQgZG8gc29tZSB3b3JrIHRvby4KKyAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0u
c3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0g
bV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIEFTU0VSVCh2YWxp
ZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9Vbmlx
dWVkU2lnbmF0dXJlSW5kaWNlcykpOworCisgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKKyAg
ICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV92bSwg
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9V
bmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgbV9tb2RlKTsKKworICAgICAgICBpZiAoVU5MSUtFTFko
IXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAg
ICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5
LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZhaWwo
bG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBm
dW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBG
SVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkc1tpXSk7CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5k
ZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9CiAKLSAgICBm
b3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAgewot
ICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNv
bnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNj
cmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgp
LT50b1N0cmluZygpOwordm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYp
Cit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudElu
ZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBm
dW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
KTsKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAgIENvbXBpbGF0
aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOworICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAg
ICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53
YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFr
ZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2Vi
QXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3Jp
cHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNvbnRl
eHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25Q
dHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpj
b250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBG
dW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAg
ICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNU
b1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21w
aWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBp
bGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1i
bHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlv
bi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0
cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKSB7Ci0g
ICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRp
bWUpLm1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxlIGFuZCBsaW5r
IHRoZSBtb2R1bGUiKTsKLSAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNoIHRoZSBjYWxs
IHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0byYgdW5s
aW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsK
LSAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3Rl
YWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSBy
ZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBj
YWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMKKyAgICAg
ICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAgICAg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5m
b3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5m
dW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNv
dWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNo
cG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNT
RVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAg
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQgPT0gVW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAgICAgID8gbV93
YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkKICAgICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0U3R1YnMuYXQo
Y2FsbC5mdW5jdGlvbkluZGV4KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJn
ZXQgIT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwu
ZnVuY3Rpb25JbmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgbV9mYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29t
cGxldGVkKSB7CisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAgICAg
ICBtX2NvbXBsZXRpb25UYXNrKCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxs
KCk7CisgICAgfQogfQogCi12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2b2lkIFBsYW46
OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRl
eCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXgpIHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQotICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2Fs
bGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2Fz
bUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1
bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsK
LQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVu
Y3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUg
IT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUg
YSB3YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHRv
IGNvbXBsZXRlIC8gZmFpbC4KKyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xvY2spOworICAg
IH0KK30KIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlw
b2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpjYW5jZWwoKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3Rh
dGU6OkNvbXBsZXRlZCkgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNz
YWdlIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgfQogfQog
CisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5MDkzZWY2YmE4
MTg0ZTQ1YzRmZTAwNzY2MmY0Li45ZGIxNGVhNjk1OWE1NzYyYThjMzljODNmMjdkYmY4OTVjMjM0
YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEgKzQwLDk2IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7
CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQ
bGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQgZG9udEZp
bmFsaXplKFBsYW4mKSB7IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChQbGFuJik+
IENvbXBsZXRpb25UYXNrOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21w
aWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rv
cjx1aW50OF90PiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29t
cGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIGJv
b2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0gc3Rk
OjpudWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6
Om51bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAgIHZv
aWQgY29tcGlsZUZ1bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0
aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwotCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7
IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2Fn
ZTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluaXRp
YWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBv
cnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAg
cmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAgICAgc2l6ZV90
IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
c2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7
CisgICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAgICAg
fQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJ
bmZvcm1hdGlvbigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAg
IHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAogICAgIEJhZzxD
YWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYm
ICFoYXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwog
ICAgIH0KIAogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhpdFN0dWJzKCkK
ICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1v
dmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25z
dCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAgdm9p
ZCBzZXRNb2RlQW5kUHJvbWlzZShNZW1vcnlNb2RlIG1vZGUsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlKQorICAgIHsKKyAgICAgICAgbV9tb2RlID0gbW9kZTsKKyAgICAgICAgbV9wZW5kaW5n
UHJvbWlzZSA9IHByb21pc2U7CisgICAgfQorICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQorICAgIEpTUHJvbWlzZURlZmVycmVkKiBwZW5kaW5nUHJvbWlzZSgp
IHsgcmV0dXJuIG1fcGVuZGluZ1Byb21pc2U7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVy
biBtX3ZtOyB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7CisgICAgICAgIElu
aXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQsCisgICAgICAgIENv
bXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21w
bGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKworICAgIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKwor
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFlcnJv
ck1lc3NhZ2UoKS5pc051bGwoKTsgfQorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9CisKKyAgICB2b2lk
IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToKKyAg
ICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRI
b2xkZXI7CisKKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CisKKyAg
ICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAgICB2b2lkIGZhaWwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworCisgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
bV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKQEAgLTEw
MywxNiArMTM4LDI0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNt
SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxD
b21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAgIFZNKiBtX3Zt
OworICAgIFZNJiBtX3ZtOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3BlbmRpbmdQcm9taXNl
IHsgbnVsbHB0ciB9OworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRhc2s7CisKICAg
ICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVf
dCBtX3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmlu
ZyBtX2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKKyAgICBNZW1v
cnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBt
X2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1fc3RhdGUgeyBT
dGF0ZTo6SW5pdGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAgICB1
aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1fY3Vy
cmVudEluZGV4IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFkYzYzMmVhOTIz
NTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1
ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAgICAg
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1Rv
V2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxs
ZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBjYWxsYmFj
ayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuY3BwCmluZGV4IDc1ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMzNzRmY2FlNjU0
NjEyMTQuLjkyMzg1OTRiYTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMjcxLDcgKzI3MSw3
IEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJnZXQs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByCiAgICAgICAgIGlmICh0YXJnZXQuc2lnbmF0dXJl
KCkgPT0gVm9pZCkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiYnJhbmNoIHRvIGJsb2Nr
IG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCB0YXJnZXQudHlwZSgpID09IEJsb2NrVHlw
ZTo6VG9wTGV2ZWwgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJsb2Nr
IiwgIiBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwgdGFyZ2V0LnNp
Z25hdHVyZSgpKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJnZXQuc2lnbmF0
dXJlKCkgIT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgZG9l
c24ndCBtYXRjaCBibG9jaydzIHR5cGUiKTsKIAogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRlZDYw
MDkxNzU3YTBiZjA0NWIzYTNlZjFiOTYyM2M4MjE3NTdmNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAsMCArMSwyNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworI2luY2x1ZGUgPHd0Zi9OdW1iZXJP
ZkNvcmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgY2hhciogV29ya2xpc3Q6OnByaW9y
aXR5U3RyaW5nKFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsK
KyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlvbjogcmV0dXJuICJQcmVwYXJhdGlvbiI7Cisg
ICAgY2FzZSBQcmlvcml0eTo6U2h1dGRvd246IHJldHVybiAiU2h1dGRvd24iOworICAgIGNhc2Ug
UHJpb3JpdHk6OkNvbXBpbGF0aW9uOiByZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAgICBjYXNlIFBy
aW9yaXR5OjpTeW5jaHJvbm91czogcmV0dXJuICJTeW5jaHJvbm91cyI7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0OjpUaHJlYWQg
ZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
ID0gQXV0b21hdGljVGhyZWFkOworICAgIFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBXb3JrbGlzdCYgd29yaykKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgd29yay5tX2xvY2ss
IHdvcmsubV9wbGFuRW5xdWV1ZWQpCisgICAgICAgICwgd29ya2xpc3Qod29yaykKKyAgICB7CisK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9u
UGxhbihjb25zdCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBhdXRvJiBxdWV1ZSA9
IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVudC5w
bGFuKQorICAgICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgUG9sbFJlc3VsdCBw
b2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisgICAgICAgIHN5bmNocm9uaXplLm5v
dGlmeUFsbCgpOworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgeworCisgICAgICAg
ICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICAg
ICAgaWYgKHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAgIGVsZW1lbnQg
PSBxdWV1ZS50b3AoKTsKKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFs
aWRhdGUvcHJlcGFyZS4KKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVl
blByZXBhcmVkKCkpCisgICAgICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAgICAgICAgICAg
IGlmIChlbGVtZW50LnBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9s
bFJlc3VsdDo6V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIg
dGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJl
IGFyZSBvdGhlciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9u
UGxhbihsb2NrZXIpOworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0KKworICAgIFdv
cmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNvbXBsZXRlID0g
WyZdICgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKworICAgICAgICBQ
bGFuKiBwbGFuID0gZWxlbWVudC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQocGxhbik7Cisg
ICAgICAgIGlmICghcGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAgICAgIHBsYW4t
PnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxhbi0+aGFzV29y
aygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBwbGFuLT5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCp3b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0UHJpb3JpdHko
KTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsKKyAgICAgICAg
ICAgIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBzb21lIG9jY2Fz
aW9uYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5IGUuZy4gc3lu
Y2hyb25vdXMsIHBsYW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBsYW4tPmNvbXBp
bGVGdW5jdGlvbnMoKTsKKyAgICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAgICAg
ICBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmtsaXN0Lm1fbG9j
aykpOworICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBD
b25kaXRpb24gc3luY2hyb25pemU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0OworICAgIC8vIFdl
IGNhbiBvbmx5IG1vZGlmeSBlbGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4gQSBzeW5jaHJv
bm91cyBjb21waWxlIG1pZ2h0IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBpbiBvcmRlciB0
byBib29zdCB0aGUgcHJpb3JpdHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7Cit9OworCit2
b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7CisgICAgc3dpdGNo
IChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgorICAgICAgICBw
cmlvcml0eSA9IFByaW9yaXR5OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK2VudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFrLCBEcm9wQW5k
Q29udGludWUsIENvbnRpbnVlIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lk
IFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4gaXRl
cmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMgZnVu
Y3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBxdWV1
ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIG91ciBvd24g
UHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1CisgICAgc3RkOjp2ZWN0b3I8UXVldWVFbGVt
ZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgeworICAgICAgICBR
dWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgIG1fcXVldWUucG9w
KCk7CisgICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50KTsKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykgeworICAgICAg
ICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVl
KQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICBjb250
aW51ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykKKyAg
ICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworfQorCit2b2lkIFdvcmtsaXN0OjplbnF1ZXVl
KFJlZjxQbGFuPiBwbGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworCisg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAo
UXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVsZW1l
bnQsIGVsZW1lbnQucGxhbi5nZXQoKSAhPSAmcGxhbi5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm4gSXRlcmF0ZVJlc3VsdDo6Q29udGludWU7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgYSBwcm9taXNlIGl0IG11c3QgYmUgc3luY2hyb25vdXMgc28gd2Ug
c2hvdWxkIGJvb3N0IHRoZSBwcmlvcml0eS4KKyAgICBQcmlvcml0eSBwcmlvcml0eSA9IHBsYW4t
PnBlbmRpbmdQcm9taXNlKCkgPyBQcmlvcml0eTo6UHJlcGFyYXRpb24gOiBQcmlvcml0eTo6U3lu
Y2hyb25vdXM7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkVucXVldWluZyBwbGFuIHdpdGgg
cHJpb3JpdHk6ICIsIHByaW9yaXR5U3RyaW5nKHByaW9yaXR5KSk7CisgICAgbV9xdWV1ZS5wdXNo
KHsgcHJpb3JpdHksIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7CisgICAgbV9wbGFu
RW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOworfQorCit2b2lkIFdvcmtsaXN0Ojpjb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCit7CisgICAgeworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVF
bGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5wbGFuID09ICZwbGFu
KSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJv
bm91czsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6VXBkYXRlQW5kQnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6Q29u
dGludWU7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJl
YWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50LnBsYW4gPT0gJnBsYW4pCisg
ICAgICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnByaW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNo
cm9ub3VzOworICAgICAgICB9CisgICAgfQorCisgICAgcGxhbi53YWl0Rm9yQ29tcGxldGlvbigp
OworfQorCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVl
dWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGlmICgmZWxlbWVudC5wbGFuLT52bSgpID09
ICZ2bSkgeworICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgZm9yIChh
dXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5w
bGFuICYmICZ0aHJlYWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAgICAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRo
ZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBo
b2xkIHRoZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnBsYW4t
PmNhbmNlbCgpOworICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KCptX2xvY2sp
OworICAgICAgICB9CisgICAgfQorfQorCitXb3JrbGlzdDo6V29ya2xpc3QoKQorICAgIDogbV9s
b2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNU
aHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcGls
YXRpb25UaHJlYWRzID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJP
ZlByb2Nlc3NvckNvcmVzKCkgOiAxOworICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZDb21waWxhdGlvblRocmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2sp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFk
czsgaSsrKQorICAgICAgICBtX3RocmVhZHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8V29ya2xpc3Q6OlRocmVhZD4obG9ja2VyLCAqdGhpcykpOworfQorCitXb3JrbGlzdDo6fldv
cmtsaXN0KCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwor
ICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwg
bnVsbHB0ciB9KTsKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwor
ICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytp
KQorICAgICAgICBtX3RocmVhZHNbaV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdvcmtsaXN0KiBn
bG9iYWxXb3JrbGlzdDsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKSB7IHJl
dHVybiBnbG9iYWxXb3JrbGlzdDsgfQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCkKK3sKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVXb3JrbGlzdCwgW10geworICAgICAgICBnbG9iYWxXb3JrbGlzdCA9
IG5ldyBXb3JrbGlzdCgpOworICAgIH0pOworICAgIHJldHVybiAqZ2xvYmFsV29ya2xpc3Q7Cit9
CisKKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdv
cmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zOWMwNzM1YmMyYTE2ZmMyMzZmODE1NzBmMjhlODU5YTVjY2NlNDUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
IlZNLmgiCisKKyNpbmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU1Byb21pc2VEZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOwor
CitjbGFzcyBXb3JrbGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgV29ya2xpc3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZW5xdWV1ZShSZWY8UGxhbj4pOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yVk0o
Vk0mKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25v
dXNseShQbGFuJik7CisKKyAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCos
IFBsYW4qKTsKKyAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4q
KTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFRocmVh
ZDsKKworICAgIHR5cGVkZWYgdWludDY0X3QgVGlja2V0OworICAgIFRpY2tldCBuZXh0VGlja2V0
KCkgeyByZXR1cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBlbnVtIGNsYXNzIFBy
aW9yaXR5IHsKKyAgICAgICAgU2h1dGRvd24sCisgICAgICAgIFN5bmNocm9ub3VzLAorICAgICAg
ICBDb21waWxhdGlvbiwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworICAgIGNvbnN0IGNo
YXIqIHByaW9yaXR5U3RyaW5nKFByaW9yaXR5KTsKKworICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQg
eworICAgICAgICBQcmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRpY2tldDsKKyAg
ICAgICAgUmVmUHRyPFBsYW4+IHBsYW47CisKKyAgICAgICAgdm9pZCBuZXh0UHJpb3JpdHkoKTsK
KyAgICB9OworCisgICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBib29sIG9wZXJhdG9y
KCkoY29uc3QgUXVldWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5w
cmlvcml0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC50aWNrZXQgPiByaWdodC50aWNr
ZXQ7CisgICAgICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBpdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOworCisg
ICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
PiBtX3BsYW5FbnF1ZXVlZDsKKyAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxv
dyBidXQgdGhhdCdzIHVubGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBp
bGUgdGhpbmdzIG9mIHRoZSBzYW1lCisgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVy
LCB3aGljaCBpc24ndCB3cm9uZywganVzdCBzdWJvcHRpbWFsLgorICAgIFRpY2tldCBtX2xhc3RH
cmFudGVkVGlja2V0IHsgMCB9OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpW
ZWN0b3IgYnV0IFdURjo6VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVy
YXRvci4KKyAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8
UXVldWVFbGVtZW50PiwgQ29tcGFyYXRvcj4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPEpTUHJvbWlz
ZURlZmVycmVkKiwgUGxhbio+IG1fYWN0aXZlUGxhbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxUaHJlYWQ+PiBtX3RocmVhZHM7Cit9OworCitXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlz
dE9yTnVsbCgpOworSlNfRVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCk7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgKaW5kZXggYjg3NzdkYTBkNGQ3YTEzMGY0MjI0ZWQ0NWZjY2MyZDE5YzFmMjdj
Ni4uYThhM2RjYTNkMDlmNWRkMzlkYTZiOWE4Zjk5NWRjODUwODk4N2FjNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaApAQCAt
NjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlw
b2ludCYmKTsKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwogCiAgICAgV2FzbTo6
RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmZjg3MTE2
ODE5YTMyMjQzOWU4MWNiZDA0NjQ3MmEyNmYyMTgzZDhiLi5lYjk2MDczYjY5OThiMDJhMjA3NGFi
MTVkZjc3NDY3NjJkNmZiNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMjksMzEgKzI5LDY3IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldh
c21QbGFuSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwg
bnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9
OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExp
bmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2Fz
bTo6TWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBvd25lciwgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxh
biwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNh
bGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVi
cykpCisgICAgLCBtX3BsYW4oV1RGTW92ZShwbGFuKSkKICAgICAsIG1fbW9kZShtb2RlKQogICAg
ICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5zZXQodm0sIHRo
aXMsIG93bmVyKTsKKyAgICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxvY2sobW9kZSkpOworICAg
IG1vZHVsZSgpLT5tX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZt
LCB0aGlzLCB0aGlzKTsKKwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCit2
b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpbml0
aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBwbGFuKCkudm0oKTsK
KyAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIXBsYW4oKS5oYXNXb3JrKCkpOworCisgICAgaWYgKHBsYW4oKS5mYWlsZWQo
KSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBsYW4oKS5lcnJvck1lc3NhZ2UoKTsKKyAg
ICAgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUKHBsYW4oKS5tb2RlKCkgPT0gbW9kZSgpKTsKKyAgICBBU1NFUlQocGxhbigp
LmludGVybmFsRnVuY3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworCisgICAgbV9jYWxs
TGlua0luZm9zID0gcGxhbigpLnRha2VDYWxsTGlua0luZm9zKCk7CisgICAgbV93YXNtRXhpdFN0
dWJzID0gcGxhbigpLnRha2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuKCkuaW5pdGlhbGl6
ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSkgeworICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBq
c0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwg
Y2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9KTsKKworICAgIG1fcGxh
biA9IG51bGxwdHI7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygp
OwogfQogCi1ib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIG1lbW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZl
VG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAgIGlmICghcnVu
bmFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2FzbTo6TWVtb3J5TW9kZSBj
b2RlTW9kZSA9IG1vZGUoKTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUgPSBtZW1v
cnktPm1lbW9yeSgpLm1vZGUoKTsKICAgICBzd2l0Y2ggKGNvZGVNb2RlKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgK
aW5kZXggZmU4YzNmM2JhMjBhNmZlNjgxNWViMTQ0MGE1N2ZiZGMyMjliZmQ5Yy4uMDhhYmRiYzAy
MWI4MThjMzk1NTk2MTY5YTFjZGEyNDVkZTk4ZTUxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNh
bGxlZS5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRl
IDx3dGYvQmFnLmg+CkBAIC0zOSwxNCArNDAsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBK
U1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeTsKIAorbmFtZXNw
YWNlIFdhc20geworY2xhc3MgUGxhbjsKK30KKwogY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8
Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJz
PiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3Vu
dCkKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206
OlBsYW4+JiYgcGxhbiwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgewotICAgICAgICBhdXRv
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxs
TGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhp
dFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBh
bGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBv
d25lciwgbW9kZSwgV1RGTW92ZShwbGFuKSwgY2FsbGVlQ291bnQpOwogICAgICAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC01
OSw3ICs2NCwxNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KICAgICBXYXNtOjpNZW1v
cnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotICAgIGJv
b2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSopOworCisgICAgLy8gRG9uJ3QgY2Fs
bCBpbnRpYWxpemUgZGlyZWN0bHksIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmb3IgeW91LCBhcyBu
ZWVkZWQsIGJ5IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbi4KKyAgICB2
b2lkIGluaXRpYWxpemUoKTsKKyAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4g
IW1fcGxhbjsgfQorCisgICAgV2FzbTo6UGxhbiYgcGxhbigpIGNvbnN0IHsgQVNTRVJUKCFpbml0
aWFsaXplZCgpKTsgcmV0dXJuICptX3BsYW47IH0KKworICAgIGJvb2wgcnVubmFibGUoKSBjb25z
dCB7IHJldHVybiBpbml0aWFsaXplZCgpICYmICFtX2Vycm9yTWVzc2FnZTsgfQorICAgIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKCkgeyBBU1NFUlQoIXJ1bm5hYmxlKCkpOyByZXR1cm4gbV9lcnJvck1l
c3NhZ2U7IH0KKyAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25z
dDsKIAogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKQEAgLTg5
LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1f
Y2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKICAgICB9CiAKLSAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOwotICAgIH0KKyAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKSB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsgfQogCiAgICAgdm9pZCogd2FzbVRv
SnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB7CkBAIC0xMDEs
NyArMTEyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxsTGlua0luZm8+JiYs
IFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnlNb2RlLCB1bnNpZ25l
ZCBjYWxsZWVDb3VudCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqLCBXYXNtOjpNZW1vcnlNb2RlLCBSZWY8V2FzbTo6UGxhbj4mJiwgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKQEAgLTEyNSw2ICsxMzYsOSBAQCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93
YXNtRXhpdFN0dWJzOworICAgIC8vIFRoZSBwbGFuIHRoYXQgaXMgY29tcGlsaW5nIHRoaXMgY29k
ZSBibG9jay4KKyAgICBSZWZQdHI8V2FzbTo6UGxhbj4gbV9wbGFuOworICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1fbW9kZTsKICAgICB1bnNpZ25lZCBt
X2NhbGxlZUNvdW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmluZGV4IGYwMzMxMGVhNWUyMDYwNjU0MWQ1OGU3MjY0
YjE4NWU0M2Q2OTMzZDQuLjU3OGE2OWY0OTgxNWE4MjUyM2MxMTI5NDhmYmQ4ZWEwOTAzNWYyMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlI
ZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaApAQCAtNzMsNiArNzMsMjIgQEAgQUxXQVlTX0lOTElORSB1aW50OF90KiBnZXRX
YXNtQnVmZmVyRnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgc2kKICAg
ICByZXR1cm4gYXJyYXlCdWZmZXJWaWV3ID8gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVm
ZmVyVmlldy0+dmVjdG9yKCkpIDogc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5p
bXBsKCktPmRhdGEoKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgc2l6ZV90IGJ5dGVPZmZzZXQ7CisgICAgc2l6ZV90IGJ5dGVTaXplOworICAgIHVp
bnQ4X3QqIGRhdGEgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBieXRlT2Zm
c2V0LCBieXRlU2l6ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKKworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhICsg
Ynl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIHJldHVybiBi
dWZmZXI7CisKKyAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQUxXQVlTX0lO
TElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2Jq
ZWN0LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCiB7CiAgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHModm0sIFdlYkFzc2VtYmx5RnVuY3Rpb246OmluZm8oKSkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmlu
ZGV4IDFjMTFiMGNhNjVjOTE3NDJmOGU0ODEzYzI0ZDk3NWY2NWVlYmFhMTguLjA1ZjcxN2E4Yzhi
ZmJhMmIyYTcwMjBlZTRlOTdmNDI2M2E3OTM4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMzIsMzEg
KzMyLDE2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52
aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtF
cnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4g
Zm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2Fu
dCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgotICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7
Ci0gICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxv
Y2sodm0sIGV4ZWMsIG1lbW9yeSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
KTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIH0K
LSAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Ci19Ci0KLUpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBUaGVzZSBv
YmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVy
ZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpKSkgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRp
b24oKS5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpKTsKLSAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1vZHVsZSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKLSAg
ICByZXR1cm4gaW5zdGFuY2U7Ci19Citjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CkBAIC03NSwxMSAr
NjAsMTEgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCisgICAgbV9tb2R1bGUu
c2V0KHZtLCB0aGlzLCBtb2R1bGUpOwogICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUg
PSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVn
aXN0ZXIpOwogICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRy
YU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0
cmFNZW1vcnlTaXplKTsKIAotICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5j
b2RlQmxvY2soKSk7CiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBt
b2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJleHBvcnRzIiksIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9
CkBAIC05NSwxNiArODAsMjg3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxv
Y2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCku
Z2xvYmFscy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0
LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqdGhp
c09iamVjdC0+aW1wb3J0RnVuY3Rpb24oaSkpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtpXSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjphZGRVbml0aWFsaXplZENvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpQbGFuPiBw
bGFuKQoreworICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNy
ZWF0ZSh2bSwgbW9kdWxlKCksIG1lbW9yeU1vZGUoKSwgV1RGTW92ZShwbGFuKSwgbW9kdWxlKCkt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpOworICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+
aW5pdGlhbGl6ZWQoKSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6
ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQoreworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZSgpOwor
CisgICAgaWYgKCFjb2RlQmxvY2soKS0+cnVubmFibGUoKSkgeworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZt
LCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJs
b2NrKCktPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlQoY29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKG1lbW9yeSgpKSk7CisKKyAgICBh
dXRvKiBtb2R1bGVSZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21v
ZHVsZU5hbWVzcGFjZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOworICAgIG1vZHVsZVJlY29yZC0+
bGluayhleGVjLCBtb2R1bGUoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2
YWx1YXRlKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0
cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUpCit7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisKKyAg
ICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7CisgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfTsKKworICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5v
dCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9y
IGlzIHRocm93bi4KKyAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYg
IWltcG9ydE9iamVjdCkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1
c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUg
cmVxdWlyZXMgaW1wb3J0cyIpKSk7CisKKyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50
aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2Vi
QXNzZW1ibHlJbnN0YW5jZSIpKTsKKyAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxl
UmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1v
ZHVsZUluZm9ybWF0aW9uKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOworCisgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9
IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOworICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2
bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSk7CisgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OworCisgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1l
bXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1l
bW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHku
CisgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJu
YWwgdmFsdWVzLgorICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7CisgICAgdW5z
aWduZWQgbnVtSW1wb3J0R2xvYmFscyA9IDA7CisKKyAgICBib29sIGhhc01lbW9yeUltcG9ydCA9
IGZhbHNlOworICAgIGJvb2wgaGFzVGFibGVJbXBvcnQgPSBmYWxzZTsKKyAgICAvLyBGb3IgZWFj
aCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKKyAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKKyAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJl
c3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25h
bWUpLgorICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0LT5n
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGltcG9ydC5tb2R1bGUpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAg
Ly8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAg
ICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVz
dCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOworCisgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2
YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBpLml0ZW1fbmFtZSkKKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBpbXBvcnQuZmllbGQpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKworICAgICAgICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7CisgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gNC4g
SWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoKKyAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFi
bGUodikgaXMgZmFsc2UsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAg
ICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
ImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxhYmxlIikpKTsKKworICAgICAgICAgICAgSlNP
YmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICAgICAg
Ly8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKKyAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKKyAgICAgICAgICAgIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOworICAgICAgICAg
ICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rp
b24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhl
IHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cg
YSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1
bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2Fz
bUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5j
dGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNs
b3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3
YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5jdGlvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0g
bW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5r
aW5kSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9
IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRl
ZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBpaWkuIE90aGVyd2lzZToKKyAgICAgICAgICAgIC8vIGEuIExldCBjbG9z
dXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBj
YWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFy
Z3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkg
Y29lcmNpbmcgdmlhIFRvV2ViQXNzZW1ibHlWYWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGU6IGRv
bmUgYXMgcGFydCBvZiBQbGFuIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgLy8gaXYuIEFwcGVu
ZCB2IHRvIGZ1bmNzLgorICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8g
dGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUg
KHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93
ICh0aGUgSlNGdW5jdGlvbikuCisKKyAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlv
bnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7CisgICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVu
Y3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9u
KTsKKyAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8v
IFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAg
ICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAg
ICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxl
KiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsK
KyAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0
LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAgIGlmICghdGFibGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOworCisgICAgICAgICAgICB1aW50MzJfdCBl
eHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRp
YWwoKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgp
OworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlh
bCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJs
ZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJl
cyB0aGF0IGl0IGRvZXMiKSkpOworICAgICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+
ICpleHBlY3RlZE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBv
cnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0
ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWkuIEFw
cGVuZCB2IHRvIHRhYmxlcy4KKyAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1d
IHRvIGltcG9ydHMuCisgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3Rh
bmNlLCB0YWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CisgICAgICAgICAgICAvLyA2LiBJZiBpIGlz
IGEgbWVtb3J5IGltcG9ydDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNNZW1vcnlJ
bXBvcnQpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWls
dXJlLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
KTsKKyAgICAgICAgICAgIGhhc01lbW9yeUltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1v
cnkqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3Nl
bWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAg
ICAgICAgIGlmICghbWVtb3J5KQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkg
aW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpOworCisg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKKyAgICAgICAgICAgIC8v
IDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxp
ZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkpOworICAgICAgICAgICAgaGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJB
c3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5v
dCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgorICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVy
YWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9y
eSIpKSk7CisKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBkZWNsYXJlZEluaXRpYWwgPSBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOworICAgICAgICAgICAgV2FzbTo6UGFn
ZUNvdW50IGltcG9ydGVkSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOworICAg
ICAgICAgICAgaWYgKGltcG9ydGVkSW5pdGlhbCA8IGRlY2xhcmVkSW5pdGlhbCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcg
dGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1vZHVsZSdzIGRlY2xhcmVkICdpbml0aWFsJyBpbXBv
cnQgbWVtb3J5IHNpemUiKSkpOworCisgICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGRl
Y2xhcmVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKKyAg
ICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgaW1wb3J0ZWRNYXhpbXVtID0gbWVtb3J5LT5t
ZW1vcnkoKS5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpbXBvcnRlZE1heGltdW0p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3Qg
aGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkp
OworCisgICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkTWF4aW11bSA+IGRlY2xhcmVkTWF4aW11
bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlk
ZWQgYSAnbWF4aW11bScgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZGVjbGFyZWQg
J21heGltdW0nIGltcG9ydCBtZW1vcnkgc2l6ZSIpKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KKyAgICAgICAgICAgIC8vIGlpaS4g
QXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNTRVJUKCFpbnN0
YW5jZS0+bV9tZW1vcnkpOworICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwg
aW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgLy8gNS4gSWYg
aSBpcyBhIGdsb2JhbCBpbXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBp
bW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgIEFTU0VSVCht
b2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOworICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9i
YWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKKyAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOworICAgICAgICAgICAg
Ly8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCisgICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKKyAgICAg
ICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4
XS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVj
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoK
KyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywg
Yml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAg
ICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAvLyBXZSBz
aG91bGQgZWl0aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93
biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBv
cnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAm
JiAhaGFzTWVtb3J5SW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3JlYXRl
IGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAgICAgICAgUmVm
UHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5t
YXhpbXVtKCkpOworICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKworICAgICAgICAg
ICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCisgICAgICAgICAgICAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgp
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1h
dGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24uaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEg
VGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJs
ZUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUo
KSwKKyAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwor
ICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNX
ZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCisgICAgICAgICAgICAvLyBJZiBpdCdzIGRl
ZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9u
IGVycm9yLgorICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCh0YWJsZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5z
ZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYg
KCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBk
dW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBm
b3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4K
KyAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7
CisgICAgfQorICAgIAorICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1J
bXBvcnRHbG9iYWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwor
ICAgICAgICBmb3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2Jh
bEluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgp
IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbZ2xvYmFsSW5kZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXph
dGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoZ2xv
YmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1i
ZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xv
YmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJp
dHNPckltcG9ydE51bWJlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
aW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBv
cnROdW1iZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29k
ZUJsb2NrKCkpOworICAgIGluc3RhbmNlLT5tX2NvZGVCbG9jay5zZXRNYXlCZU51bGwodm0sIGlu
c3RhbmNlLCBqc01vZHVsZS0+Y29kZUJsb2NrKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpKTsKKwor
ICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkgfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggZTIyODQ5Njk2NzIwNWEzMTM2Yzg4M2Ji
ZGUzMjZhZGJjNzExMTMwZC4uZWM5YmM4ZTgxNDA3MmI3ZWUyNWU5MmI5YjQ5ZTEwODQ2YWJmZDVk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgKQEAgLTM4LDUxICszOCwzNCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIAor
bmFtZXNwYWNlIFdhc20geworY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpT
T2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBE
RUNMQVJFX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5tb2R1bGUoKTsKLSAgICB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29k
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KKyAgICBib29sIGlu
aXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gY29kZUJsb2NrKCkgJiYgY29kZUJsb2NrKCktPmlu
aXRpYWxpemVkKCk7IH0KKyAgICB2b2lkIGFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKFZNJiwgUmVm
PFdhc206OlBsYW4+KTsKKyAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUq
KTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxv
Y2suZ2V0KCk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0
RnVuY3Rpb25zKClbaWR4XTsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBp
bXBvcnRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9m
SW1wb3J0RnVuY3Rpb25zKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24o
Vk0mIHZtLCBKU09iamVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIGlt
cG9ydEZ1bmN0aW9uKGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwotICAgIH0KKyAgICBKU09i
amVjdCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNTRVJUKGlkeCA8
IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygpW2lkeF0uZ2V0
KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVt
b3J5LmdldCgpOyB9Ci0gICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBp
bGUuCi0gICAgdm9pZCBzZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVt
b3J5Kik7CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2
YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
IH0KICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+
bWVtb3J5KCkubW9kZSgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyBy
ZXR1cm4gbV90YWJsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFz
c2VtYmx5VGFibGUqIHRhYmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KIAog
ICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbHMuZ2V0KClbaV07IH0KICAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC05MCwxMSArNzMsNiBAQCBw
dWJsaWM6CiAgICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KICAgICB2b2lkIHNl
dEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0g
Yml0czsgfQogCi0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2ln
bmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygp
ICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIGlkeDsKLSAgICB9Ci0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFs
cyk7IH0KQEAgLTExMyw2ICs5MSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Cisg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKworICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3Nl
bWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGY0MTQ2N2Y0ZmFh
ZTlkYWEwODE2NzRlN2YyMDU3OGQ0YzVlYjZmM2MuLmEyY2QzNDYxMmE2YjllNGIyYzlkMjExZWZk
ODQwOWEwNDY4MDVkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC00MiwzNSArNDIsMTggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+
IG1vZGUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVT
dHViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRy
PEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikKIHsKKyAg
ICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciBpcyB0aHJvd24uCi0gICAgcGxhbi5ydW4obW9kZSk7Ci0gICAgaWYgKHBsYW4uZmFp
bGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3IoZXhlYywgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkpKTsKKyAg
ICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2Nv
cGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgc3RydWN0dXJl
LT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxh
bi0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAg
IGlmIChtb2RlKQotICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkpOwotCi0gICAg
dW5zaWduZWQgY2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAg
IGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgdGhp
cywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0dWJzKCksIHBs
YW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7Ci0KLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4
ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNh
bGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICBjb2Rl
QmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2lu
dENhbGxlZSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBvaW50Q2FsbGVl
KHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICB9KTsKLSAg
ICByZXR1cm4gY29kZUJsb2NrOwotfQotCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKLXsKLSAgICBhdXRvKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+
KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICBy
ZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUo
dm0sIHN0cnVjdHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUtPmZpbmlzaENyZWF0
aW9uKHZtLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwogfQogCiBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzgsNjEgKzYxLDQw
IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9k
dWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisg
ICAgLCBtX3NvdXJjZUJ1ZmZlcihzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkKIHsKIH0KIAotSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAg
V2FzbTo6TWVtb3J5TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2RlczsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja3NbaV0gJiYgbV9jb2RlQmxvY2tzW2ldLT5pc1NhZmVU
b1J1bihtZW1vcnkpKQotICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2Rl
IGJsb2NrIGZvciB0aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCi0gICAgV2FzbTo6
UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRh
KCkpLCBtX3NvdXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLQotICAgIGF1dG8qIGNvZGVCbG9j
ayA9IGJ1aWxkQ29kZUJsb2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIEFTU0VSVChwbGFuLmV4cG9ydHMoKS5z
aXplKCkgPT0gbV9leHBvcnRTeW1ib2xUYWJsZS0+c2l6ZSgpKTsKLSAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKQotICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChleHAsIG1fZXhwb3J0U3ltYm9sVGFibGUtPmNvbnRhaW5z
KGV4cC5maWVsZC5pbXBsKCkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxv
Y2stPm1vZGUoKSk7Ci0gICAgY29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3Vy
Y2UsIHNpemVfdCBieXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFdhc206OlBsYW4g
cGxhbigmdm0sIHNvdXJjZSwgYnl0ZVNpemUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5m
b3JtYXRpb24oKTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLT5leHBv
cnRzKSB7CisgICAgICAgIEFTU0VSVChleHAuZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhy
ZWFkKCkpOworICAgICAgICBleHAuZmllbGQgPSBBdG9taWNTdHJpbmcoZXhwLmZpZWxkKTsKKyAg
ICB9CisgICAgZm9yIChhdXRvJiBpbXAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cykgewor
ICAgICAgICBBU1NFUlQoaW1wLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsK
KyAgICAgICAgaW1wLmZpZWxkID0gQXRvbWljU3RyaW5nKGltcC5maWVsZCk7CisgICAgICAgIEFT
U0VSVChpbXAubW9kdWxlLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAg
aW1wLm1vZHVsZSA9IEF0b21pY1N0cmluZyhpbXAubW9kdWxlKTsKKyAgICB9CiAKLSAgICBhdXRv
KiBjb2RlQmxvY2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3Zl
KG1vZHVsZUluZm9ybWF0aW9uKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUg
dmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxl
ID0gU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4
cG9ydHMoKSkgeworICAgIGZvciAoYXV0byYgZXhwIDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhw
b3J0cykgewogICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4
dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5bWJvbFRh
YmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJs
ZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CisgICAgICAgIEFTU0VSVChleHAuZmllbGQuaW1w
bCgpLT5pc0F0b21pYygpKTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tp
bmdOZWNlc3NhcnksIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihleHAuZmllbGQuaW1w
bCgpKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0KIAotICAg
IG1fc291cmNlQnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsK
LSAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsK
ICAgICBtX2V4cG9ydFN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUp
OwotICAgIGNvZGVCbG9ja0Zvcihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0aGlzLCBjb2Rl
QmxvY2spOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCmluZGV4IDM4OWU2M2EzMzVjMWMxMTdiNjk3Njk3MTBjNjNiZDdmODM0ZTg2ZTQu
LmE0MTc4ODRkZDUxMTkzY2JkMGE2YzYyY2Q2NjkxZDMxOGY0YWUwZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTQ4
LDM1ICs0OCwzMiBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206
OlBsYW4+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAgICBjb25z
dCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJl
dHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIFJlZlB0cjxXYXNtOjpNZW1v
cnk+IHRha2VSZXNlcnZlZE1lbW9yeSgpIHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1l
bW9yeS50YWtlUmVzZXJ2ZWRNZW1vcnkoKTsgfQogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1i
b2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgdGhlIGNv
ZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3Rp
bmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUlu
Zm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpKS5nZXQoKTsgfQotICAgIC8vIFJldHVybnMgdGhlIGFw
cHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdn
ZXJpbmcgYSByZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2Nr
KFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1f
Y29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQorCisgICAgQXJy
YXlCdWZmZXImIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQnVmZmVyLmdldCgpOyB9
CiAKIHByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+JiBj
b2RlQmxvY2tGb3IoV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nb
c3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV07IH0KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBidWlsZENvZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlv
bmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIGZyaWVuZCBj
bGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShW
TSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUq
LCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZShWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZm
ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVs
ZUluZm9ybWF0aW9uOworICAgIFJlZjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUlu
Zm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xU
YWJsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2tzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuY3BwCmluZGV4IDE2ZmM4ZDJiZWNkMzdiZGZkYzZiMDNkMDY1YTM2Yzg3OTc3ZTNiOTYu
LjA0MWRkMzU4NDg0NzRhNWU4Zjg5N2RlNzdjYjRiZDc1MmM5ZmIyOWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5j
bHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5oIgpAQCAtNDUsOCArNDcsNiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCiBjb25zdCBDbGFzc0lu
Zm8gV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIs
ICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlJbnN0YW5jZSwgQ1JF
QVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IpIH07CiAKIC8q
IFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5oCkBAIC01NCwy
NjkgKzU0LDUyIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfCiAgQGVuZAogICovCiAKK3VzaW5n
IFdhc206OlBsYW47CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byYg
dm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1bGUgaW5zdGFuY2Us
IGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVs
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFqc01vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0
IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGlt
ZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CisgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4
ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2Ug
bXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1
bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogCiAgICAgLy8gSWYgdGhl
IGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRP
YmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVl
IGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9y
dE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJn
dW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5J
bnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFw
cGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291
cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOwogICAg
IAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLQotICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwgaW1wb3J0T2JqZWN0
LCBpbnN0YW5jZVN0cnVjdHVyZSkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVj
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
U3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKLXsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotCi0gICAg
Y29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0KLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNP
YmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGVycm9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAgIC8vIElmIHRo
ZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmpl
Y3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBpZiAobW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBt
YWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmpl
Y3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIpKSk7Ci0KLSAg
ICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUo
UHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0KLSAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0s
IGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1l
c3BhY2UoZXhlYykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0
cik7Ci0KLSAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5
LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHku
TWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVs
eS4KLSAgICAvLyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRl
cm5hbCB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0gMDsKLSAgICB1
bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsKLQotICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0
ID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOwotICAgIC8vIEZvciBl
YWNoIGltcG9ydCBpIGluIG1vZHVsZS5pbXBvcnRzOgotICAgIGZvciAoYXV0byYgaW1wb3J0IDog
bW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewotICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUg
cmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVf
bmFtZSkuCi0gICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3Qt
PmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBudWxscHRyKTsKLSAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2Jq
ZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5p
c09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOwot
Ci0gICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBp
Lml0ZW1fbmFtZSkKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGltcG9ydE1vZHVsZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0
KGV4ZWMsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewotICAgICAg
ICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIC8vIDQu
IElmIGkgaXMgYSBmdW5jdGlvbiBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxh
YmxlKHYpIGlzIGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIEpT
T2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKLSAgICAgICAgICAg
IC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6Ci0gICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0gICAgICAgICAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKLSAgICAgICAg
ICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0
aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIC8vIGEuIElmIHRo
ZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21G
dW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdh
c21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVu
Y3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBj
bG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0g
d2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9
IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQu
a2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAh
PSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlk
ZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAgICAvLyBhLiBMZXQgY2xv
c3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2gg
Y2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBh
cmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5
IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlOiBk
b25lIGFzIHBhcnQgb2YgUGxhbiBjb21waWxhdGlvbi4KLSAgICAgICAgICAgIC8vIGl2LiBBcHBl
bmQgdiB0byBmdW5jcy4KLSAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRv
IHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3Zl
ICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxv
dyAodGhlIEpTRnVuY3Rpb24pLgotCi0gICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rp
b25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9y
dEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKyspOwotICAgICAgICAg
ICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQg
YmUgZ3VhcmFudGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAgIC8vIDcu
IE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICBoYXNUYWJsZUlt
cG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAg
Ly8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJB
c3NlbWJseS5UYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IGRlY2xhcmVkSW5pdGlh
bCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwotICAgICAg
ICAgICAgdWludDMyX3QgaW1wb3J0ZWRJbml0aWFsID0gdGFibGUtPnNpemUoKTsKLSAgICAgICAg
ICAgIGlmIChpbXBvcnRlZEluaXRpYWwgPCBkZWNsYXJlZEluaXRpYWwpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBp
cyB0b28gc21hbGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gZGVjbGFyZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5t
YXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbXBv
cnRlZE1heGltdW0gPSB0YWJsZS0+bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghaW1w
b3J0ZWRNYXhpbXVtKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1w
b3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhh
dCBpdCBkb2VzIikpKTsKLSAgICAgICAgICAgICAgICBpZiAoKmltcG9ydGVkTWF4aW11bSA+ICpk
ZWNsYXJlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRl
ZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQg
J21heGltdW0nIikpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWkuIEFwcGVu
ZCB2IHRvIHRhYmxlcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRv
IGltcG9ydHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMg
c2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOwotICAgICAgICAgICAg
aGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7
Ci0gICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmpl
Y3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCFtZW1v
cnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFu
IGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7Ci0KLSAgICAgICAgICAgIFdhc206
OlBhZ2VDb3VudCBkZWNsYXJlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5p
dGlhbCgpOwotICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGltcG9ydGVkSW5pdGlhbCA9IG1l
bW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOwotICAgICAgICAgICAgaWYgKGltcG9ydGVkSW5pdGlh
bCA8IGRlY2xhcmVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5
IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1v
ZHVsZSdzIGRlY2xhcmVkICdpbml0aWFsJyBpbXBvcnQgbWVtb3J5IHNpemUiKSkpOwotCi0gICAg
ICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGRlY2xhcmVkTWF4aW11bSA9IG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291
bnQgaW1wb3J0ZWRNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFpbXBvcnRlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlM
aXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1v
ZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlt
cG9ydGVkTWF4aW11bSA+IGRlY2xhcmVkTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYSAnbWF4aW11bScgdGhhdCBpcyBsYXJn
ZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZGVjbGFyZWQgJ21heGltdW0nIGltcG9ydCBtZW1vcnkgc2l6
ZSIpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBt
ZW1vcmllcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBv
cnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVtb3J5KTsK
LSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9y
dDoKLSAgICAgICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRo
cm93IGEgVHlwZUVycm9yLgotICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0
YWJsZSk7Ci0gICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0
IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3Iu
Ci0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZElu
ZGV4XS50eXBlID09IFdhc206Okk2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1w
b3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9i
YWwgbXVzdCBiZSBhIG51bWJlciIpKSk7Ci0gICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dl
YkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VSVChudW1JbXBv
cnRHbG9iYWxzID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgc3dpdGNoIChtb2R1
bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwo
bnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9i
YWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVt
YmVyKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmlzSW1wb3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBh
IE1lbW9yeSBpbXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQp
IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
aXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdz
IGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBt
ZW1vcnk7Ci0gICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2Vy
dmVkTWVtb3J5KCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5ID0ganNNb2R1bGUtPnRha2VSZXNl
cnZlZE1lbW9yeSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtb3J5
ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0
aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICAgICAg
ICAgIGlmICghbWVtb3J5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKLSAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9k
dWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNh
c2VzOgorICAgIC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiBpbml0aWFsaXplZCBD
b2RlQmxvY2sgKHJ1bm5hYmxlKSwgc28gd2UganVzdCBuZWVkIHRvIGZpbmFsaXplQ3JlYXRpb24u
CisgICAgLy8gMikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8g
bWFrZSBvbmUgYW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0
YW5jZSBhbHJlYWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywgc28gd2UgbmVlZCB0
byB3YWl0IGZvciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgorCisgICAgaWYgKCFpbnN0YW5j
ZS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKQor
ICAgICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0ZVBsYW5TeW5jaHJvbm91
c2x5KGluc3RhbmNlLT5jb2RlQmxvY2soKS0+cGxhbigpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbW9k
dWxlLT5zb3VyY2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFBsYW46OmRvbnRGaW5hbGl6ZSkpOwor
ICAgICAgICAgICAgcGxhbi0+c2V0TW9kZUFuZFByb21pc2UoaW5zdGFuY2UtPm1lbW9yeU1vZGUo
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxv
Y2sodm0sIHBsYW4uY29weVJlZigpKTsKKworICAgICAgICAgICAgYXV0byYgd29ya2xpc3QgPSBX
YXNtOjplbnN1cmVXb3JrbGlzdCgpOworICAgICAgICAgICAgd29ya2xpc3QuZW5xdWV1ZShwbGFu
LmNvcHlSZWYoKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5jb21wbGV0ZVBsYW5TeW5jaHJvbm91
c2x5KHBsYW4uZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAo
ISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IGVpdGhlciBoYXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBl
eGNlcHRpb24uCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uICYmICFoYXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7Ci0gICAgICAgICAg
ICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6
Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
VGFibGVTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJs
ZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlv
bi5tYXhpbXVtKCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRv
IGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJv
d24gYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAotICAgICAgICAgICAgaW5z
dGFuY2UtPnNldFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWluc3RhbmNlLT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1
bW15IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZv
ciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgot
ICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1v
cnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOwotICAgIH0K
LQotICAgIC8vIEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxz
ID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBmb3Ig
KHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9k
dWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFs
SW5kZXhdOwotICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0g
V2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxp
emF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBv
cnRHbG9iYWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbElu
ZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51
bWJlcikpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwotICAgIEpTVmFsdWUg
c3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIFVOVVNFRF9Q
QVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVD
cmVhdGlvbih2bSwgZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3Rh
dGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDU5NzA5ZjUxNzU2ZGM1
NWVhMmJkMjc4NjYzNTA1ZTllMzkzN2YwMTMuLjM1OTk2MjJmMmNhMjQ5YjFlMWQ4MTIwY2EzNjNh
ZDYxNGU1YTZlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC03NSwxMyArNzUs
MTMgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmYKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHNpemVfdCBi
eXRlT2Zmc2V0OwotICAgIHNpemVfdCBieXRlU2l6ZTsKLSAgICB1aW50OF90KiBiYXNlID0gZ2V0
V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsK
KyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21W
YWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCi0gICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpjcmVhdGUodm0sIGV4ZWMsIHN0cnVjdHVyZSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVT
aXplKTsKKyAgICBSZWZQdHI8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBXYXNtOjpQ
bGFuKHZtLCAqc291cmNlLCBXYXNtOjpQbGFuOjpWYWxpZGF0aW9uLCBXYXNtOjpQbGFuOjpkb250
RmluYWxpemUpKTsKKyAgICBpZiAoIXBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkp
KTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywg
c3RydWN0dXJlLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOwogfQogCiBXZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5
cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZmZmZWU1YzEwZjU5Zjgx
ZjFiYmUzY2YxZDU0NzdjZjkwYzY4N2Y3MC4uZmI1NjFkOWRkYjg3ZTc0MDcyOWE2MjliNTE4NjE3
MDU0OTE2YmExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtNzMsOCArNzMsMTAgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIGNvbnN0IFdhc20KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCB2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpCi0gICAgICAgIGFkZEV4cG9ydEVudHJ5
KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5maWVsZCkpOworICAgIGZv
ciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhwb3J0cykgeworICAgICAg
ICBJZGVudGlmaWVyIGZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVs
ZCk7CisgICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChmaWVs
ZCwgZmllbGQpKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTg1LDE0
ICs4NywxMyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zdGFydEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UpCit2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlID0gaW5zdGFuY2UtPm1vZHVsZSgpOwogICAgIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKQEAgLTExMiw3ICsxMTMsNyBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YQogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBw
ZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlm
IHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlm
IHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0
aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxs
IGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBu
ZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5k
ZXggPCBmdW5jdGlvbkltcG9ydENvdW50KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCA9IGV4cC5raW5kSW5kZXg7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1
bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbnN0YW5j
ZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
V2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKICAgICAgICAgICAg
ICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OwogICAgICAgICAgICAgICAg
IGVsc2UgewpAQCAtMTI4LDcgKzEyOSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhCiAgICAg
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBj
b2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAu
a2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4
cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBl
eHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2Fs
bGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1
bmN0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzksNyArMTgw
LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgYm9vbCBzaG91bGRUaHJvd1Jl
YWRPbmx5RXJyb3IgPSBmYWxzZTsKICAgICAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9
IHRydWU7CiAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIHN5bWJvbFRh
YmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBleHAuZmll
bGQsIGV4cG9ydGVkVmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9u
bHlFcnJvcnMsIHB1dFJlc3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBv
aW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgZXhwLmZpZWxkKSwgZXhwb3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBp
Z25vcmVSZWFkT25seUVycm9ycywgcHV0UmVzdWx0KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHV0UmVzdWx0KTsKICAgICB9CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YQogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAg
ICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwogICAg
ICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0
YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAg
ICAgICAgICAgIEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0
aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlv
bi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2Nr
LT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlKTsKQEAgLTI1MSw3ICsyNTIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgdWludDMy
X3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwogICAgICAgICAg
ICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291
bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBq
c0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4
KS0+Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQg
PSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbklu
ZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9u
KHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5j
dGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBzZXQgdGhl
IGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKaW5kZXggNWRjZWI0
MmQ4ZjhjMjA2OTgyOTRiYWEwYzZiYmNmNDliOGRjZDQzZC4uMmI4MzcyZTdjN2MzMzk0NzhlOWJl
NzY1MTc3ZWI4NTI0MTZkNDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCkBAIC0zMyw2ICszMyw3IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOworY2xhc3MgSlNX
ZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb247CiAKIC8vIEJhc2Vk
IG9uIHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSBzcGVjaWZpY2F0aW9uCkBAIC00Nyw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZCogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICB2b2lkIGxpbmsoRXhl
Y1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgdm9pZCBsaW5rKEV4ZWNTdGF0
ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRl
eCAwZDc2YjliNTA2NDc5ODY4OTE0NmZhZjM0ZjBlNTBjNWExNDVhMjMzLi4wOWUzM2M0Mjc5ODll
MzVmNmFlOTAxZGJhNDJhY2YwMmFmZjllZmIwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxv
ZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAzLTI3ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBNYWtlIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlL2NvbXBpbGUgdHJ1bHkgYXN5bmNocm9u
b3VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkx
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdh
c20vYXNzZXJ0LmpzOgorICAgICAgICAqIHdhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzOgor
ICAgICAgICAoYXN5bmMudGVzdFByb21pc2VBUEkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dl
Yi1hc3NlbWJseS1jb21waWxlLXBhcmFsbGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRo
cm93RXhuKToKKyAgICAgICAgKGFzeW5jLnRlc3QpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dl
Yi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qczogQWRkZWQuCisgICAgICAgIChhc3lu
Yy50ZXN0KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUu
anM6CisgICAgICAgIChhc3NlcnQuZXEuYXN5bmMudGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEp
OgorICAgICAgICAoYXNzZXJ0LmFzeW5jVGVzdC5hc3luYy50ZXN0KToKKyAgICAgICAgKGFzc2Vy
dC5hc3luY1Rlc3QpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeS5hc3luYy50ZXN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKGFzc2VydC50cnV0aHkpOiBEZWxldGVkLgorCiAyMDE3LTAzLTI3ICBKRiBC
YXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogbWlz
YyBtZW1vcnkgdGVzdGluZwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pT
VGVzdHMvd2FzbS9hc3NlcnQuanMKaW5kZXggZTlkYjBhOWIwMTZkMGEyNTlkZmYzZmQ2MmFkMzdk
MzdiZDc5MmVhMS4uZTc5NDI4NzVmMWZmMThiNTc5N2M1YmViNjBhOWNhOTAzOTIzNTYwZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcworKysgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0
LmpzCkBAIC0xNDQsMyArMTQ0LDI0IEBAIGV4cG9ydCB7CiAgICAgX3Rocm93cyBhcyB0aHJvd3Ms
CiAgICAgX2luc3RhbmNlb2YgYXMgaW5zdGFuY2VvZiwKIH07CisKK2NvbnN0IGFzeW5jVGVzdElt
cGwgPSAocHJvbWlzZSwgdGhlbkZ1bmMsIGNhdGNoRnVuYykgPT4geworICAgIGFzeW5jVGVzdFN0
YXJ0KDEpOworICAgIHByb21pc2UudGhlbih0aGVuRnVuYykuY2F0Y2goY2F0Y2hGdW5jKTsKK307
CisKK2NvbnN0IHByaW50RXhuID0gKGUpID0+IHsKKyAgICBwcmludCgiRmFpbGVkOiAiLCBlKTsK
KyAgICBwcmludChlLnN0YWNrKTsKK307CisKK2V4cG9ydCBjb25zdCBhc3luY1Rlc3QgPSAocHJv
bWlzZSkgPT4gYXN5bmNUZXN0SW1wbChwcm9taXNlLCBhc3luY1Rlc3RQYXNzZWQsIHByaW50RXhu
KTsKK2V4cG9ydCBjb25zdCBhc3luY1Rlc3RFcSA9IChwcm9taXNlLCBleHBlY3RlZCkgPT4gewor
ICAgIGNvbnN0IHRoZW5DaGVjayA9ICh2YWx1ZSkgPT4geworICAgICAgICBpZiAodmFsdWUgPT09
IGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0dXJuIGFzeW5jVGVzdFBhc3NlZCgpOworICAgICAg
ICBwcmludCgiRmFpbGVkOiBnb3QgIiwgdmFsdWUsICIgYnV0IGV4cGVjdGVkICIsIGV4cGVjdGVk
KTsKKworICAgIH0KKyAgICBhc3luY1Rlc3RJbXBsKHByb21pc2UsIHRoZW5DaGVjaywgcHJpbnRF
eG4pOworfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUu
anMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCmluZGV4IGYzNDNjNmU5
M2M3MzEyNWU0OWFkOTNmNGFhNzJhMWEwOWU2OWUyYmIuLjYzMjQzMDI3YmI5MjM2NzBjY2M4M2Mx
NTU3NmRkY2E1ZDllYTZlNzMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxl
LWNvbXBpbGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwpA
QCAtMSw3ICsxLDYgQEAKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwog
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKLWxldCBkb25lID0gZmFsc2U7
CiBhc3luYyBmdW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICB7CiAgICAgICAgIC8vIENh
bid0IGRlY2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCkBAIC0xNCwzOSArMTMsMzAgQEAgYXN5
bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICAuQ29kZSgpCiAgICAg
ICAgICAgICAuRW5kKCk7CiAKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcg
PSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09
PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1v
cnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSAoZXZhbHVh
dGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
KTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5u
b3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAg
IGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgbGV0IHRocmV3
ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5j
b21waWxlKCk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVl
OwogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAg
ICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFu
IEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1i
bHkuY29tcGlsZSgpJykiKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3
KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICB0
cnkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgyMCk7CiAgICAgICAg
IH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNz
ZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAgIGFzc2VydC5l
cShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBv
ciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZSgyMCknKSIp
OwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAg
IHsKQEAgLTYxLDEwICs1MSw2IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewog
ICAgICAgICBsZXQgbW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5j
ZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgfQotCi0gICAgZG9uZSA9IHRydWU7CiB9CiAK
LXRlc3RQcm9taXNlQVBJKCk7Ci1kcmFpbk1pY3JvdGFza3MoKTsKLWFzc2VydC50cnV0aHkoZG9u
ZSk7Cithc3NlcnQuYXN5bmNUZXN0KHRlc3RQcm9taXNlQVBJKCkpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTJmZWFlY2I5ZTg0MTcyODNlYzRhOWFhNzQ5ODJiOTRjYjQwOWQ2OAotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwu
anMKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworYXN5bmMgZnVuY3Rp
b24gdGhyb3dFeG4oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2FzeW5jIGZ1bmN0
aW9uIHRlc3QoKSB7CisgICAgY29uc3QgbG9vcERlcHRoID0gMTA7CisgICAgY29uc3QgbnVtQ29t
cGlsYXRpb25zID0gMTsKKyAgICBjb25zdCBudW1WYXJzID0gMzA7CisgICAgY29uc3QgcGFyYW1z
ID0gW107CisgICAgcGFyYW1zLmxlbmd0aCA9IG51bVZhcnM7CisgICAgcGFyYW1zLmZpbGwoImkz
MiIpOworCisgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlw
ZSgpLkVuZCgpCisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0
KCkKKyAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zLCByZXQ6
ICJpMzIiIH0pOworCisgICAgY29uc3QgbWFrZUxvb3AgPSAoYnVpbGRlciwgZGVwdGgpID0+IHsK
KyAgICAgICAgaWYgKGRlcHRoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisK
KyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgICAgIC5Mb29wKCJpMzIiLCAoYikg
PT4geworICAgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAg
ICAgICAgICAgIC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkK
KyAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5Ccklm
KDEpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIo
MCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIKKworICAgIH0KKwor
ICAgIGJ1aWxkZXIgPSBtYWtlTG9vcChidWlsZGVyLCBsb29wRGVwdGgpOworICAgIGJ1aWxkZXIg
PSBidWlsZGVyLkVuZCgpLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25z
LnB1c2goV2ViQXNzZW1ibHkuY29tcGlsZShiaW4pKTsKKyAgICB9CisKKyAgICBhd2FpdCBQcm9t
aXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1w
YXJhbGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRl
LXBhcmFsbGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NDdiY2FkMGI4ODgwNDc2YTc4M2JkZGMxYTk0MWNl
YTQyNjBkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3Nl
bWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnOworCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0IGxvb3BEZXB0
aCA9IDEwMDsKKyAgICBjb25zdCBudW1Db21waWxhdGlvbnMgPSAxOworICAgIGNvbnN0IG51bVZh
cnMgPSAzMDsKKyAgICBjb25zdCBwYXJhbXMgPSBbXTsKKyAgICBwYXJhbXMubGVuZ3RoID0gbnVt
VmFyczsKKyAgICBwYXJhbXMuZmlsbCgiaTMyIik7CisKKyAgICBsZXQgYnVpbGRlciA9IChuZXcg
QnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHsgaW5pdGlhbDogMCB9KQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXMsIHJldDogImkzMiIgfSk7CisK
KyAgICBjb25zdCBtYWtlTG9vcCA9IChidWlsZGVyLCBkZXB0aCkgPT4geworICAgICAgICBpZiAo
ZGVwdGggPT09IDApCisgICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKKworICAgICAgICBidWls
ZGVyID0gYnVpbGRlcgorICAgICAgICAgICAgLkxvb3AoImkzMiIsIChiKSA9PiB7CisgICAgICAg
ICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkK
KyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAgIC5UZWVM
b2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgfQorCisgICAgYnVpbGRlciA9IG1h
a2VMb29wKGJ1aWxkZXIsIGxvb3BEZXB0aCk7CisgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCku
RW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IDAgfSk7
CisgICAgY29uc3QgaW1wb3J0T2JqZWN0ID0geyAiaW1wIjogeyAibWVtb3J5IjogbWVtb3J5IH0g
fTsKKworICAgIC8vIENvbXBpbGUgYSBidW5jaCBvZiBpbnN0YW5jZXMgaW4gcGFyYWxsZWwuCisg
ICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29t
cGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2ViQXNzZW1ibHku
aW5zdGFudGlhdGUoYmluLCBpbXBvcnRPYmplY3QpKTsKKyAgICB9CisKKyAgICBsZXQgW2luc3Rd
ID0gYXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKyAgICBsZXQgbW9kdWxlID0gaW5z
dC5tb2R1bGU7CisKKyAgICAvLyBDb21waWxlIGEgYnVuY2ggb2YgaW5zdGFuY2VzIGZyb20gbW9k
dWxlcyBpbiBwYXJhbGxlbC4KKyAgICBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IG51bUNvbXBpbGF0aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBpbGF0aW9ucy5w
dXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAg
fQorCisgICAgYXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKworICAgIC8vIENvbXBp
bGUgYW4gaW5zdGFuY2UgZnJvbSBhIG1vZHVsZSBpbiBwYXJhbGxlbCwgaGF2ZSBzeW5jIGNvbXBp
bGF0aW9uIHN0ZWFsIGl0LgorICAgIGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGNvbXBpbGF0aW9u
cy5wdXNoKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7Cisg
ICAgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGltcG9ydE9iamVjdCk7
CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5
bmNUZXN0KHRlc3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3Nl
bWJseS1pbnN0YW50aWF0ZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWlu
c3RhbnRpYXRlLmpzCmluZGV4IGE5M2JjNjA1ZmYxN2RkZWU4MDFmN2E3NTMzNDE4NmE4NjFkNDQy
YWQuLmZiNDg4N2EwN2M0ZTc5MWViMzU1MDg3NjU4OTg1OTg5MGViMjE2NGUgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCisrKyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCkBAIC0xOSwxOCAr
MTksMTQgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAK
ICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQg
ZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIGxldCB7
bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwog
ICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVs
ZSk7CiAgICAgICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eS5JbnN0YW5jZSk7CiAgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCks
IDEpOwotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJh
aW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5
bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTQ4LDE5ICs0NCwxNSBAQCBhc3NlcnQuZXEoV2Vi
QXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5
bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9k
dWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwp
OwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2Us
ICJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVzdCBiZSB1bmRl
ZmluZWQgb3IgYW4gT2JqZWN0IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShi
aW4sIG51bGwpJykiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAK
LSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShk
b25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTc4LDIwICs3
MCwxNiBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAog
ICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBk
b25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsK
ICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5p
bnN0YW50aWF0ZShiaW4pOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2Vy
dC50cnV0aHkoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgICAg
ICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFs
aWRhdGU6IGNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLCBpbiBmdW5j
dGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4p
JykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCB2YWxpZGF0ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVk
IHR5cGUsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAiKTsKICAgICAgICAgfQotICAgICAgICBkb25l
ID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0g
ICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9
CiAKIHsKQEAgLTExMCwxOSArOTgsMTUgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRp
YXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5zdGFuY2V9ID0g
YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsK
ICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAi
TWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChl
dmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIw
fX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0
IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAgICAgICAgfQot
ICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNy
b3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0
KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTE0MSwyMCArMTI1LDE2IEBAIGFzc2VydC5lcShXZWJBc3Nl
bWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBm
dW5jdGlvbiB0ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uc3QgbW9kdWxl
ID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICAgICAgbGV0IGluc3RhbmNl
ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19
KTsKICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdl
LCAiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5
IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6
IDIwfX0pJykiKTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1w
b3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAgICAgICAg
fQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5N
aWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNU
ZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTE3MiwxOCArMTUyLDE0IEBAIGFzc2VydC5lcShXZWJB
c3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3lu
YyBmdW5jdGlvbiB0ZXN0KCkgewogICAgICAgICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOwogICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5p
bnN0YW50aWF0ZShtb2R1bGUpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KGluc3RhbmNlIGluc3Rh
bmNlb2YgV2ViQXNzZW1ibHkuSW5zdGFuY2UpOwogICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2Uu
ZXhwb3J0cy5mb28oMjApLCAxKTsKLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQogCi0gICAg
dGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7
CisgICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQogCiB7CkBAIC0yMDIsNyArMTc4LDYg
QEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBj
b25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9
IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CkBAIC0yMTAsMTAgKzE4
NSw3IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCiAgICAgICAgICAg
ICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1
ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3Rh
bnRpYXRlKDI1KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQog
Ci0gICAgdGVzdCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHko
ZG9uZSk7CisgICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305602</attachid>
            <date>2017-03-28 10:32:08 -0700</date>
            <delta_ts>2017-03-28 14:32:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169187-20170328103207.patch</filename>
            <type>text/plain</type>
            <size>227576</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
M2FkNDRiNDBiOGJjOTA5NmVjZmI1NzRhNDc2ODk5N2E4NjdhNDUyLi43ZWMwYzRmZjM4MzQzYjE5
NGNkOTA0NjJhODNlMGQzYjIyNDRkMDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjYgQEAKKzIwMTctMDMtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1ha2UgV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUvY29tcGlsZSB0cnVseSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTE4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIFdlYkFzc2VtYmx5IGNvbXBp
bGF0aW9ucyB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRvIGRvIHNvLCBpdCBy
ZWZhY3RvcnMgaG93IG11Y2ggb2YgdGhlIGNvbXBpbGF0aW9uIGhhcHBlbnMgYW5kIGFkZHMKKyAg
ICAgICAgbmV3IGluZnJhc3RydWN0dXJlIGZvciBhc3luYyBwcm9taXNlcy4KKworICAgICAgICBG
aXJzdCwgdGhlcmUgaXMgYSBuZXcgY2xhc3MsIFByb21pc2VEZWZlcnJlZFRpbWVyIHRoYXQgbGl2
ZXMgb24KKyAgICAgICAgdGhlIFZNLiAgUHJvbWlzZURlZmVycmVkVGltZXIgd2lsbCBtYW5hZ2Ug
dGhlIGxpZmUtY3ljbGUgb2YgYXN5bmMKKyAgICAgICAgcGVuZGluZyBwcm9taXNlcyBhbmQgYW55
IGRlcGVuZGVuY2llcyB0aGF0IHByb21pc2UKKyAgICAgICAgbmVlZHMuIFByb21pc2VEZWZlcnJl
ZFRpbWVyIGF1dG9tYWdpY2FsbHkgcmVsZWFzZXMgdGhlIHBlbmRpbmcKKyAgICAgICAgcHJvbWlz
ZSBhbmQgZGVwZW5kZW5jaWVzIG9uY2UgdGhlIEpTUHJvbWlzZURlZmVycmVkIGlzIHJlc29sdmVk
IG9yCisgICAgICAgIHJlamVjdGVkLiBBZGRpdGlvbmFsbHksIFByb21pc2VEZWZlcnJlZFRpbWVy
IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgIHRvIHBvbGwgdGhlIHJ1bi1sb29wIHdoZW5l
dmVyIHRoZSBhc3luYyB0YXNrIG5lZWRzIHRvIHN5bmNocm9uaXplCisgICAgICAgIHdpdGggdGhl
IEpTIHRocmVhZC4gTm9ybWFsbHksIHRoYXQgd2lsbCBiZSB3aGVuZXZlciB0aGUgYXN5bmMgdGFz
aworICAgICAgICBmaW5pc2hlcy4gSW4gdGhlIGNhc2Ugb2YgV2ViIEFzc2VtYmx5IHdlIGFsc28g
dXNlIHRoaXMgZmVhdHVyZSBmb3IKKyAgICAgICAgdGhlIGNvbXBpbGUgKyBpbnN0YW50aWF0ZSBj
YXNlLCB3aGVyZSB3ZSBtaWdodCBoYXZlIG1vcmUgd29yaworICAgICAgICBhZnRlciB0aGUgZmly
c3QgYXN5bmMgdGFzayBjb21wbGV0ZXMgKG1vcmUgb24gdGhhdCBsYXRlcikuCisKKyAgICAgICAg
VGhlIG5leHQgY2xhc3MgaXMgV2FzbTo6V29ya2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gbWFuYWdl
IFdhc20KKyAgICAgICAgY29tcGlsYXRpb24gdGFza3MuIFRoZSB3b3JrbGlzdCBjbGFzcyB3b3Jr
cyBzaW1pbGFybHkgdG8gdGhlCisgICAgICAgIERGRy9GVEwgV29ya2xpc3RzLiBJdCBoYXMgYSBw
b29sIG9mIHRocmVhZHMgdGhhdCBpdCBtYW5hZ2VzLiBPbmUKKyAgICAgICAgaW50ZXJlc3Rpbmcg
YXNwZWN0IG9mIFdhc20gV29ya2xpc3QgaXMgdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseQorICAg
ICAgICBjb21waWxlIGEgcGxhbiB0aGF0IGlzIGFscmVhZHkgcG90ZW50aWFsbHkgcnVubmluZwor
ICAgICAgICBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gb2NjdXIgaWYgYSB1c2VyIGNhbGxzCisg
ICAgICAgIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCkgdGhlbiBuZXcgV2ViQXNzZW1ibHkoKSBv
biB0aGUgc2FtZQorICAgICAgICBtb2R1bGUuIEluIHRoYXQgY2FzZSB0aGUgV2FzbSBXb3JrbGlz
dCB3aWxsIGJ1bXAgdGhlIHByaW9yaXR5IG9mCisgICAgICAgIHRoZSBydW5uaW5nIHBlbmRpbmcg
UGxhbiBhbmQgYmxvY2sgdGhlIEpTIHRocmVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28g
bWFrZXMgc29tZSBvZiB0aGUgV2FzbSBQbGFuIGNvZGUgY2xlYW5lci4gU2luY2Ugd2UKKyAgICAg
ICAgbm93IGRlZmVyIGFsbCBjb21waWxhdGlvbiB0byBpbnN0YW50aWF0aW9uIHRpbWUsIHdlIG5v
IGxvbmdlciBuZWVkCisgICAgICAgIHRvIGd1ZXNzIGF0IHdoaWNoIG1lbW9yeSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0LiBBbHNvLCBXYXNtIFBsYW5zIG5vdworICAgICAgICB0cmFjayB0aGUgd29yayB0
aGV5IGhhdmUgZG9uZSB3aXRoIGEgc3RhdGUgZW51bS4KKworICAgICAgICBGaW5hbGx5LCB0aGlz
IHBhdGNoIG1ha2VzIHJlbmFtZWQgSGVhcFRpbWVyIHRvIEpTUnVuTG9vcFRpbWVyLiBJdAorICAg
ICAgICBhbHNvIGFkZHMgY2hhbmdlcyB0ZXN0MjYyQXN5bmNUZXN0IHRvIGEgbW9yZSBnZW5lcmlj
IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuIE5vdywgaW4gYWRkaXRpb24gdG8gdGhl
IG9sZCBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuCisgICAgICAgIGNhbGwgYXN5bmNUZXN0KCkgd2l0
aCB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QuIFdoZW4gdGhlIGpzYworICAgICAgICBD
TEkgZXhpdHMsIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYXN5bmNUZXN0UGFzc2VkKCkgaXMgY2Fs
bGVkIHRoYXQKKyAgICAgICAgbWFueSB0aW1lcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaDoKKyAgICAgICAgKiBoZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAg
ICAqIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwOgorICAgICAgICAoSlNDOjpTdG9wSWZO
ZWNlc3NhcnlUaW1lcjo6U3RvcElmTmVjZXNzYXJ5VGltZXIpOgorICAgICAgICAqIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuaDoKKyAgICAgICAgKiBoZWFwL1N0cm9uZ0lubGluZXMuaDoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChwcmludEludGVybmFsKToKKyAgICAgICAgKGZ1bmN0aW9uQXN5bmNUZXN0U3Rh
cnQpOgorICAgICAgICAoZnVuY3Rpb25Bc3luY1Rlc3RQYXNzZWQpOgorICAgICAgICAoZnVuY3Rp
b25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VB
cmd1bWVudHMpOgorICAgICAgICAocnVuSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlz
ZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURlZmVy
cmVkOjpwcm9taXNlQXN5bmNQZW5kaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTUnVuTG9vcFRp
bWVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1l
ci5jcHAuCisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1lcik6Cisg
ICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpzZXRSdW5Mb29wKToKKyAgICAgICAgKEpTQzo6
SlNSdW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9v
cFRpbWVyOjp0aW1lckRpZEZpcmUpOgorICAgICAgICAoSlNDOjpKU1J1bkxvb3BUaW1lcjo6c2No
ZWR1bGVUaW1lcik6CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcik6
CisgICAgICAgIChKU0M6OkpTUnVuTG9vcFRpbWVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUnVuTG9vcFRpbWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJlZFRpbWVyKToKKyAgICAgICAg
KEpTQzo6UHJvbWlzZURlZmVycmVkVGltZXI6OmRvV29yayk6CisgICAgICAgIChKU0M6OlByb21p
c2VEZWZlcnJlZFRpbWVyOjpydW5SdW5Mb29wKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmFkZFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURlZmVy
cmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKToKKyAgICAgICAgKEpTQzo6UHJvbWlzZURl
ZmVycmVkVGltZXI6OnNjaGVkdWxlV29ya1Nvb24pOgorICAgICAgICAoSlNDOjpQcm9taXNlRGVm
ZXJyZWRUaW1lcjo6c2NoZWR1bGVCbG9ja2VkVGFzayk6CisgICAgICAgICogcnVudGltZS9Qcm9t
aXNlRGVmZXJyZWRUaW1lci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmguCisgICAgICAgIChKU0M6OlByb21pc2VEZWZlcnJlZFRpbWVyOjpzdG9w
UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAqIHdhc20vSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6OnJlamVj
dCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlND
OjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpj
b21waWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUluc3RhbnRp
YXRlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAg
ICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpwbGFuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6cnVubmFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjplcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYWxsZWVzKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAq
IHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3Jt
YXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11
bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpoYXNSZXNlcnZlZE1l
bW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjp0
YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJ
bmZvcm1hdGlvbjo6bW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpNb2R1bGVQYXJzZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENv
dW50SG9sZGVyOjpUaHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxp
emVDYWxsZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OmRvbnRGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmV4cG9ydHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbnRlcm5hbEZ1bmN0aW9u
Q291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlTW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlQ2FsbExpbmtJbmZvcyk6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnRha2VXYXNtRXhpdFN0dWJzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6c2V0TW9kZUFuZFByb21pc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpt
b2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGVuZGluZ1Byb21pc2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp2bSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmVycm9y
TWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNC
ZWVuUHJlcGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW5JbmxpbmVzLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmguCisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNt
L1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnByaW9yaXR5U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6bmV4dFByaW9yaXR5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6Oml0ZXJhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojpjb21w
bGV0ZVBsYW5TeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0
b3BBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OldvcmtsaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6On5Xb3JrbGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpl
bnN1cmVXb3JrbGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6V29ya2xpc3Q6OkNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnNldE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVk
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjp0YWtlUmVzZXJ2ZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2tGb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaDoKKwogMjAxNy0wMy0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBiZWxvbmdzIGluIEphdmFTY3JpcHRDb3JlL3dhc20vanMgbm90IEphdmFTY3JpcHRDb3JlL3dh
c20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1YWY3MTRlMDk1MDlmOGE1
ZWNmMTY0YWFjM2FmOWE5NDBiMjEyNzZiLi43YTNjYTAxZTYyZTZlZmFmMmYwZDYwZjcyMGJiZDY0
MjFjMjBhMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01MDMsNyAr
NTAzLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXBQcm9maWxl
ci5jcHAKICAgICBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKICAgICBoZWFwL0hlYXBTbmFwc2hvdEJ1
aWxkZXIuY3BwCi0gICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL0xhcmdl
QWxsb2NhdGlvbi5jcHAKQEAgLTgwMiw2ICs4MDEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogICAgIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKICAgICBydW50aW1lL0pTUHJveHkuY3BwCisg
ICAgcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKICAgICBydW50aW1lL0pTU2NvcGUuY3BwCiAg
ICAgcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCiAgICAgcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcApAQCAtODUxLDYgKzg1MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgcnVudGltZS9PcGVyYXRpb25zLmNwcAogICAgIHJ1bnRpbWUvT3B0aW9ucy5j
cHAKICAgICBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAorICAgIHJ1bnRpbWUvUHJvbWlz
ZURlZmVycmVkVGltZXIuY3BwCiAgICAgcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCiAg
ICAgcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCiAgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNw
cApAQCAtOTQ0LDYgKzk0NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgd2Fz
bS9XYXNtUGxhbi5jcHAKICAgICB3YXNtL1dhc21TaWduYXR1cmUuY3BwCiAgICAgd2FzbS9XYXNt
VmFsaWRhdGUuY3BwCisgICAgd2FzbS9XYXNtV29ya2xpc3QuY3BwCiAKICAgICB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ZWNhNWZmZGMzYTAwNjQzZDMy
YTk0ODExYzM0MTcxN2U1YjEwNDZhLi5mMDA3MGZhZjI5YTMwMmM3MmJiNDBiNzhiNmQzNjZlNGQ4
M2VhMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMyMSwxMSArMTMyMSwx
NyBAQAogCQk1MkM5NTJCOTE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI4MTlBMjhB
MUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovOyB9OwogCQk1MkY2QzM1RDFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUIxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MzBGQjMwMjFFN0EwQjZFMDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi87IH07CisJ
CTUzMEZCMzA0MUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDMxRTdBMTE0NjAwM0Mx
OUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi87IH07CiAJCTUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi87IH07CiAJCTUz
MTM3NEJGMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyog
V2FzbVBsYW4uY3BwICovOyB9OwogCQk1MzNCMTVERjFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9w
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzQjE1
REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQxRkM3MDFEQUMzM0U1MDBFN0U0RDcgLyogQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hl
Y2tWYWx1ZS5jcHAgKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oICovOyB9OworCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcw
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzNDYzODczMUU3MEQwMTUwMEYxMkFDMSAv
KiBKU1J1bkxvb3BUaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3Bw
ICovOyB9OworCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGlt
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYz
ODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJyZWRUaW1lci5oICovOyB9OworCQk1
MzQ2Mzg3NzFFNzFFMDZFMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVkVGltZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzYxRTcxRTA2
RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAqLzsgfTsKIAkJNTM0ODZCQjcx
QzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQjYxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlw
ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsK
IAkJNTM0ODZCQkIxQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ4NkJCQTFDMThFODQ1MDBG
NkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJNTM0OTAyODUxQzcyNzZCNzAwMTJC
Q0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzQ5MDI4MjFDNzI0MkM4MDAxMkJDQjggLyogVHlwZWRBcnJheUNU
ZXN0LmNwcCAqLzsgfTsKQEAgLTEzNTksNiArMTM2NSw3IEBACiAJCTUzRjQwRTk1MUQ1QTdBRUYw
MDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi87IH07
CiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlv
blByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y4RDFGRjFFODM4N0Q0MDBE
MjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIy
NzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNG
MzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9OwogCQk1M0ZEMDREMzFEN0FC
Mjc3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAv
KiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwpAQCAtMjIzOCw4ICsyMjQ1LDYgQEAK
IAkJQzJDRjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUJGMTZFMTVB
ODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi87IH07CiAJCUMyQ0YzOUMyMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QuaCAqLzsgfTsKIAkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8q
IEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkRBNzc4MjE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMkU1MjZCRDE1OTBFRjAw
MDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3Bw
ICovOyB9OwotCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQzE1OTBFRjAw
MDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJh
cmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07
CiAJCUMyRkNBRTEwMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi87IH07CiAJCUMyRkNBRTEx
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzgxMCwxMSArMzgxNSwxNyBAQAogCQk1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9m
aWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVCMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHBh
dGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwRkIzMDExRTdBMEI2RTAwM0MxOURE
IC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
V29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwRkIzMDMxRTdBMTE0
NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzQxRkM2RjFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyog
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNDYzODcwMUU3MENGM0QwMEYx
MkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1J1bkxvb3BUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzQ2Mzg3
MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNSdW5Mb29wVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURlZmVycmVk
VGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvbWlzZURlZmVycmVk
VGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0NjM4NzYxRTcxRTA2RTAw
RjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFByb21pc2VEZWZlcnJlZFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQjYxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlw
ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVk
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ5MDI4MjFDNzI0MkM4
MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFR5cGVkQXJyYXlDVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvVHlwZWRB
cnJheUNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NTQsNiArMzg2
NSw3IEBACiAJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdh
c21Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjZC
RjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjhEMUZGMUU4
Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVBsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0RDEx
RDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc5OCw4ICs0ODEwLDYgQEAKIAkJQzJDRjM5QkYx
NkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTQVBJV3JhcHBlck9iamVjdC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3Jh
cHBlck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FQSVdyYXBw
ZXJPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJEQTc3ODIxOEUyNTk5
OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhlYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyRTUyNkJC
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSGVhcFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQzJFNTI2QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkxOSw4ICs1OTI5LDYgQEAKIAkJCQlBNTRDMkFB
RjFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggKi8sCiAJCQkJQTUzMTFDMzQxQzc3
Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwICovLAogCQkJCUE1MzExQzM1
MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggKi8sCi0JCQkJQzJFNTI2
QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCi0JCQkJQzJFNTI2QkMxNTkw
RUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAogCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJ
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLAogCQkJCUMyNUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAv
KiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLywKQEAgLTYyODgsMTEgKzYyOTYsMTQgQEAKIAkJCQk1
M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLAogCQkJCTUzMTM3NEJF
MUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJCQkJNTMxMzc0QkMxRDVDRTY3
NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8sCisJCQkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2
IC8qIFdhc21QbGFuSW5saW5lcy5oICovLAogCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAv
KiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2Fz
bVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLywKIAkJCQk1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZhbGlk
YXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRl
LmggKi8sCisJCQkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAg
Ki8sCisJCQkJNTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovLAog
CQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTY0
NDksNiArNjQ2MCw4IEBACiAJCQkJMTRBMTU2MzAxMDk2NjM2NTAwNkZBMjYwIC8qIERhdGVJbnN0
YW5jZUNhY2hlLmggKi8sCiAJCQkJQkNEMjAzNDcwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90
b3R5cGUuY3BwICovLAogCQkJCUJDRDIwMzQ4MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90
eXBlLmggKi8sCisJCQkJNTM0NjM4NzYxRTcxRTA2RTAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJl
ZFRpbWVyLmNwcCAqLywKKwkJCQk1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZURl
ZmVycmVkVGltZXIuaCAqLywKIAkJCQkxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5l
UHJvcGVydHlBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEZFMDUwMEYxQUE5MDkxMTAwRDMzQjMzIC8q
IERpcmVjdEFyZ3VtZW50cy5jcHAgKi8sCiAJCQkJMEZFMDUwMTAxQUE5MDkxMTAwRDMzQjMzIC8q
IERpcmVjdEFyZ3VtZW50cy5oICovLApAQCAtNjgzNyw2ICs2ODUwLDggQEAKIAkJCQkwRjdDMzlG
QzFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0SW5saW5lcy5oICovLAogCQkJCUJDRDIw
MkJGMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwICovLAogCQkJCUJDRDIw
MkMwMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuaCAqLywKKwkJCQk1MzQ2Mzg3
MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovLAorCQkJCTUzNDYzODcw
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovLAogCQkJCTcwQjBBOUQwMUE5
QjY2MjAwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCAqLywKIAkJCQk1Mjc3NzNERDFBQUY4M0FD
MDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwICovLAogCQkJCTUyQzA2MTFEMUFBNTFFMUIwMEI0
QURCQSAvKiBSdW50aW1lVHlwZS5oICovLApAQCAtODEzMCw2ICs4MTQ1LDcgQEAKIAkJCQkwRkVD
ODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRp
dml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYwMjc2QzAwMTNDODhGIC8qIEIz
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlCNzgwMUUwMzU1OUMwMDVCRUVE
OCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODI1MCw2ICs4MjY2LDcgQEAKIAkJ
CQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyOUQ4REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VEZWZlcnJlZFRpbWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjRCNEJEMUU4ODQ0OUEwMERC
QkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0
RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg1
MzcsNiArODU1NCw3IEBACiAJCQkJRTNGRjc1MzMxRDlDRUExODAwQzdFMTZEIC8qIERPTUpJVEdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2
IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDhFM0MxREE0MUI4
MTAwMzk0NzhGIC8qIERPTUpJVFBhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU2RjU2REUxRTY0RUFENjAwRDE3ODAxIC8qIFZNVHJhcHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUzN0FEODNDMURBNDkyODYwMEYzRDQxMiAvKiBET01KSVRQYXRjaHBvaW50UGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzdBRDgzRDFEQTQ5Mjg2MDBGM0Q0MTIgLyogRE9NSklUUmVn
LmggaW4gSGVhZGVycyAqLywKQEAgLTg3MDcsNyArODcyNSw2IEBACiAJCQkJQTUzOThGQUIxQzc1
MERBNDAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0QzJB
QjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBREU2NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGls
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzQsNyBAQAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5Jbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVn
RXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2Mjkz
MDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDEx
MUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTc3LDYg
Kzk5OTUsNyBAQAogCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0QjRDQTFFODg5RDdCMDBEQkJFODYgLyogQjNW
YXJpYWJsZUxpdmVuZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTExMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMw
RkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhERjUxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWlu
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUwRDFCRjAyNzZDMDAxM0M4OEYg
LyogQjNEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjcwLDYgKzEwMjg5LDcg
QEAKIAkJCQkxNEFEOTExNzFEQ0E5N0ZEMDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDczNDFFMjFEQzJDRTk2MDBBQTI5QkEgLyogRXZhbEV4ZWN1dGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0OTgyMDMxODkxRDBCMDAwODFFNUI4IC8qIEV2
ZW50TG9vcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzQ2Mzg3MzFFNzBEMDE1MDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxQzBGRkYxQjE5NEZE
MTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTgwQzE5QjFE
Nzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEyREUwRjE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTEwMzQ3LDcgKzEwMzY3LDYgQEAKIAkJCQlBNTM5OEZBQzFDNzUwREE2
MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NEMyQUIw
MUM2NTQ0RUUwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBENDE0QkJEMjQ5MDBCRkUyNzIgLyogSG9zdENhbGxS
ZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQzIxNDMwODFDQTMyRTU4MDAwQTg4
NjkgLyogSUNTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRTEwN0VDMzc2MDA0
MjdBNDggLyogSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNjcyLDYgKzEwNjkx
LDcgQEAKIAkJCQk5OTJBQkNGOTFCRUE5QkQyMDA2NDAzQTAgLyogUmVtb3RlQXV0b21hdGlvblRh
cmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNDFFNEU4NEE0MDAzNTk1M0IgLyog
UmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk5OThF
RDY3NDFCRUQ3MEFDMDBERDgwMTcgLyogUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUzNDYzODc3MUU3MUUwNkUwMEYxMkFDMSAvKiBQcm9taXNlRGVmZXJy
ZWRUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMg
LyogUmVtb3RlSW5zcGVjdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTU1NjY4
NjFFNEU4QjBGMDBBQUUxM0MgLyogUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk5MkY1NkI1MUU0RTg0QTgwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0b3JDb2NvYS5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NB
Y3Rpdml0eUNhbGxiYWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5
Q2FsbGJhY2suaAppbmRleCBkZGVlMjU4M2U0OWU2Yjk2OTM5MDgwZTMzOGViNWE5OWMwNDBiOTJj
Li5hZjQ3NTg4ZDYwMTE5YWQ4ZGQ1MTVkOGY0YTUwY2ZjNzI5NTgxMzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suaApAQCAtMjgsNyArMjgs
NyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1lci5oIgorI2luY2x1ZGUg
IkpTUnVuTG9vcFRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKENG
KQpAQCAtNDAsOCArNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s7CiBjbGFzcyBIZWFwOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sgOiBwdWJsaWMgSGVhcFRpbWVyIHsKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBKU1J1bkxvb3BUaW1lciB7CiBwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZSA9IEpTUnVuTG9vcFRpbWVyOwogICAgIHN0YXRpYyBSZWZQdHI8RnVsbEdD
QWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlRnVsbFRpbWVyKEhlYXAqKTsKICAgICBzdGF0aWMgUmVm
UHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlRWRlblRpbWVyKEhlYXAqKTsKIApAQCAtNzAs
MjEgKzcxLDIxIEBAIHByb3RlY3RlZDoKIAogI2lmIFVTRShDRikKICAgICBHQ0FjdGl2aXR5Q2Fs
bGJhY2soVk0qIHZtKQotICAgICAgICA6IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZt
KQogICAgICAgICAsIG1fZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fZGVsYXkoc19kZWNhZGUp
CiAgICAgewogICAgIH0KICNlbGlmIFVTRShHTElCKQogICAgIEdDQWN0aXZpdHlDYWxsYmFjayhW
TSogdm0pCi0gICAgICAgIDogSGVhcFRpbWVyKHZtKQorICAgICAgICA6IEJhc2Uodm0pCiAgICAg
ICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgICAgICwgbV9kZWxheShzX2RlY2FkZSkKICAgICB7
CiAgICAgfQogI2Vsc2UKICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2soVk0qIHZtKQotICAgICAgICA6
IEhlYXBUaW1lcih2bSkKKyAgICAgICAgOiBCYXNlKHZtKQogICAgICAgICAsIG1fZW5hYmxlZCh0
cnVlKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5NjEyOGQwMzgzOGNhNGE3NDU1MGVk
OTE2ZGY3N2EzMjVkNmI0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhlYXBU
aW1lci5oIgotCi0jaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSW5j
cmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1N0
cmluZy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2lmIFVTRShHTElCKQotI2luY2x1
ZGUgPGdsaWIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIFVTRShDRikKLSAg
ICAKLWNvbnN0IENGVGltZUludGVydmFsIEhlYXBUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICog
MjQgKiAzNjUgKiAxMDsKLQotSGVhcFRpbWVyOjpIZWFwVGltZXIoVk0qIHZtKQotICAgIDogbV92
bSh2bSkKLSAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKLXsKLSAgICBzZXRSdW5Mb29w
KHZtLT5oZWFwLnJ1bkxvb3AoKSk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzZXRSdW5Mb29wKENG
UnVuTG9vcFJlZiBydW5Mb29wKQotewotICAgIGlmIChtX3J1bkxvb3ApIHsKLSAgICAgICAgQ0ZS
dW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5M
b29wQ29tbW9uTW9kZXMpOwotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90aW1l
ci5nZXQoKSk7Ci0gICAgICAgIG1fcnVuTG9vcC5jbGVhcigpOwotICAgICAgICBtX3RpbWVyLmNs
ZWFyKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChydW5Mb29wKSB7Ci0gICAgICAgIG1fcnVuTG9v
cCA9IHJ1bkxvb3A7Ci0gICAgICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5M
b29wVGltZXJDb250ZXh0KSk7Ci0gICAgICAgIG1fY29udGV4dC5pbmZvID0gdGhpczsKLSAgICAg
ICAgbV90aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgc19kZWNhZGUsIHNfZGVjYWRlLCAwLCAwLCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSwg
Jm1fY29udGV4dCkpOwotICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0KCks
IG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgfQotfQotCi1IZWFw
VGltZXI6On5IZWFwVGltZXIoKQotewotICAgIHNldFJ1bkxvb3AoMCk7Ci19Ci0KLXZvaWQgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGNvbnRleHRQdHIp
Ci17Ci0gICAgSGVhcFRpbWVyKiB0aW1lciA9IHN0YXRpY19jYXN0PEhlYXBUaW1lcio+KGNvbnRl
eHRQdHIpOwotICAgIHRpbWVyLT5tX2FwaUxvY2stPmxvY2soKTsKLQotICAgIFJlZlB0cjxWTT4g
dm0gPSB0aW1lci0+bV9hcGlMb2NrLT52bSgpOwotICAgIGlmICghdm0pIHsKLSAgICAgICAgLy8g
VGhlIFZNIGhhcyBiZWVuIGRlc3Ryb3llZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KLSAg
ICAgICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2NrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0uZ2V0KCkpOwotICAgICAg
ICB0aW1lci0+ZG9Xb3JrKCk7Ci0gICAgfQotCi0gICAgdGltZXItPm1fYXBpTG9jay0+dW5sb2Nr
KCk7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbElu
U2Vjb25kcykKLXsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdl
dCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGludGVydmFsSW5TZWNvbmRzKTsKLSAg
ICBtX2lzU2NoZWR1bGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRpbWVy
KCkKLXsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBD
RkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHNfZGVjYWRlKTsKLSAgICBtX2lzU2NoZWR1bGVk
ID0gZmFsc2U7Ci19Ci0KLSNlbGlmIFVTRShHTElCKQotCi1jb25zdCBsb25nIEhlYXBUaW1lcjo6
c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKLQotc3RhdGljIEdTb3VyY2VGdW5j
cyBoZWFwVGltZXJTb3VyY2VGdW5jdGlvbnMgPSB7Ci0gICAgbnVsbHB0ciwgLy8gcHJlcGFyZQot
ICAgIG51bGxwdHIsIC8vIGNoZWNrCi0gICAgLy8gZGlzcGF0Y2gKLSAgICBbXShHU291cmNlKiwg
R1NvdXJjZUZ1bmMgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbgotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHVzZXJEYXRhKTsKLSAgICB9LAotICAgIG51bGxw
dHIsIC8vIGZpbmFsaXplCi0gICAgbnVsbHB0ciwgLy8gY2xvc3VyZV9jYWxsYmFjawotICAgIG51
bGxwdHIsIC8vIGNsb3N1cmVfbWFyc2hhbGwKLX07Ci0KLUhlYXBUaW1lcjo6SGVhcFRpbWVyKFZN
KiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX2FwaUxvY2soJnZtLT5hcGlMb2NrKCkpCi0g
ICAgLCBtX3RpbWVyKGFkb3B0R1JlZihnX3NvdXJjZV9uZXcoJmhlYXBUaW1lclNvdXJjZUZ1bmN0
aW9ucywgc2l6ZW9mKEdTb3VyY2UpKSkpCi17Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWUobV90aW1l
ci5nZXQoKSwgIltKYXZhU2NyaXB0Q29yZV0gSGVhcFRpbWVyIik7Ci0gICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVh
biB7Ci0gICAgICAgIGF1dG8mIGhlYXBUaW1lciA9ICpzdGF0aWNfY2FzdDxIZWFwVGltZXIqPih1
c2VyRGF0YSk7Ci0gICAgICAgIGdfc291cmNlX3NldF9yZWFkeV90aW1lKGhlYXBUaW1lci5tX3Rp
bWVyLmdldCgpLCBnX2dldF9tb25vdG9uaWNfdGltZSgpICsgSGVhcFRpbWVyOjpzX2RlY2FkZSAq
IEdfVVNFQ19QRVJfU0VDKTsKLSAgICAgICAgaGVhcFRpbWVyLnRpbWVyRGlkRmlyZSgpOwotICAg
ICAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci0g
ICAgZ19zb3VyY2VfYXR0YWNoKG1fdGltZXIuZ2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90aHJl
YWRfZGVmYXVsdCgpKTsKLX0KLQotSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKLXsKLSAgICBnX3Nv
dXJjZV9kZXN0cm95KG1fdGltZXIuZ2V0KCkpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6dGltZXJE
aWRGaXJlKCkKLXsKLSAgICBtX2FwaUxvY2stPmxvY2soKTsKLQotICAgIGlmICghbV9hcGlMb2Nr
LT52bSgpKSB7Ci0gICAgICAgIC8vIFRoZSBWTSBoYXMgYmVlbiBkZXN0cm95ZWQsIHNvIHdlIHNo
b3VsZCBqdXN0IGdpdmUgdXAuCi0gICAgICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIobV92
bSk7Ci0gICAgICAgIGRvV29yaygpOwotICAgIH0KLQotICAgIG1fYXBpTG9jay0+dW5sb2NrKCk7
Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vj
b25kcykKLXsKLSAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dl
dF9tb25vdG9uaWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VTRUNfUEVSX1NFQyk7
Ci0gICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSGVhcFRpbWVyOjpjYW5jZWxU
aW1lcigpCi17Ci0gICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUobV90aW1lci5nZXQoKSwgZ19n
ZXRfbW9ub3RvbmljX3RpbWUoKSArIHNfZGVjYWRlICogR19VU0VDX1BFUl9TRUMpOwotICAgIG1f
aXNTY2hlZHVsZWQgPSBmYWxzZTsKLX0KLSNlbHNlCi1IZWFwVGltZXI6OkhlYXBUaW1lcihWTSog
dm0pCi0gICAgOiBtX3ZtKHZtKQotewotfQotCi1IZWFwVGltZXI6On5IZWFwVGltZXIoKQotewot
fQotCi12b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZvaWQgSGVhcFRpbWVy
OjpzY2hlZHVsZVRpbWVyKGRvdWJsZSkKLXsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmNhbmNlbFRp
bWVyKCkKLXsKLX0KLSNlbmRpZgotICAgIAotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDcyYjQ3MWY2MGRiOGM2Mzc0YzU1MDE5OGQwYmU5ZTJmY2NhOGE2YjcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0jaWYgVVNFKENGKQotI2luY2x1
ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShH
TElCKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgSlNMb2NrOwotY2xhc3MgVk07Ci0KLWNsYXNzIEhlYXBUaW1lciA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxIZWFwVGltZXI+IHsKLXB1YmxpYzoKLSAgICBIZWFw
VGltZXIoVk0qKTsKLSNpZiBVU0UoQ0YpCi0gICAgc3RhdGljIHZvaWQgdGltZXJEaWRGaXJlKENG
UnVuTG9vcFRpbWVyUmVmLCB2b2lkKik7Ci0jZW5kaWYKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAw
OwotCi0gICAgdm9pZCBzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcyk7Ci0g
ICAgdm9pZCBjYW5jZWxUaW1lcigpOwotICAgIGJvb2wgaXNTY2hlZHVsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzU2NoZWR1bGVkOyB9Ci0KLSNpZiBVU0UoQ0YpCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7Ci0jZW5kaWYgLy8gVVNFKENGKQotICAg
IAotcHJvdGVjdGVkOgotICAgIFZNKiBtX3ZtOwotCi0gICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlM
b2NrOwotICAgIGJvb2wgbV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07Ci0jaWYgVVNFKENGKQotICAg
IHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKLQotICAgIFJldGFpblB0cjxD
RlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBt
X3J1bkxvb3A7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKLQot
ICAgIExvY2sgbV9zaHV0ZG93bk11dGV4OwotI2VsaWYgVVNFKEdMSUIpCi0gICAgc3RhdGljIGNv
bnN0IGxvbmcgc19kZWNhZGU7Ci0gICAgdm9pZCB0aW1lckRpZEZpcmUoKTsKLSAgICBHUmVmUHRy
PEdTb3VyY2U+IG1fdGltZXI7Ci0jZW5kaWYKLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBpbnZh
bGlkYXRlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCmluZGV4IGNmZTg5Yjg3MDdjZWJj
N2Y0YWY0ZDYzNTY2OTQxMWUxN2RjMGFjNTIuLjhjYmZhOWU4MDQwZGM2MWVmYjAxOWIyMTQ1NTQ0
NTVlMmZhODMxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmNwcApAQCAtNDEsMTEgKzQxLDExIEBAIHN0YXRpYyBjb25zdCBkb3VibGUg
c3dlZXBUaW1lTXVsdGlwbGllciA9IDEuMCAvIHN3ZWVwVGltZVRvdGFsOwogCiB2b2lkIEluY3Jl
bWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcigpCiB7Ci0gICAgSGVhcFRpbWVyOjpzY2hlZHVs
ZVRpbWVyKHN3ZWVwVGltZVNsaWNlICogc3dlZXBUaW1lTXVsdGlwbGllcik7CisgICAgQmFzZTo6
c2NoZWR1bGVUaW1lcihzd2VlcFRpbWVTbGljZSAqIHN3ZWVwVGltZU11bHRpcGxpZXIpOwogfQog
CiBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihIZWFwKiBoZWFwKQotICAg
IDogSGVhcFRpbWVyKGhlYXAtPnZtKCkpCisgICAgOiBCYXNlKGhlYXAtPnZtKCkpCiAgICAgLCBt
X2N1cnJlbnRBbGxvY2F0b3IobnVsbHB0cikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgKaW5kZXggMzRmYTg4Y2MyZWZhNzVjNGYyOGMw
NTdjNzg5YTZhZTExOTgwM2JlNi4uNzZkNDU0ZjNjMDRiMzFiZDExNGI4MDcxNDNlNGQxZTE1YTRl
NWJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIZWFw
VGltZXIuaCIKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zMyw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgSGVhcDsKIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKIAotY2xhc3MgSW5jcmVtZW50
YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CitjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIg
OiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1J1
bkxvb3BUaW1lcjsKICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBJbmNyZW1lbnRhbFN3
ZWVwZXIoSGVhcCopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdGFydFN3ZWVwaW5n
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3Nh
cnlUaW1lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5jcHAKaW5kZXggNmUzMTc2YzJjYzc2YjY4NDRjM2FmZWIwNzNjNmJjYTEzZjQ1ZDNjYy4u
OTQwZDM5ZGUyNGFjZmQzMmQ5NmE0YWMyMWVkMmMyYTUzMTdjMjFjZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOjpTdG9w
SWZOZWNlc3NhcnlUaW1lcihWTSogdm0pCi0gICAgOiBIZWFwVGltZXIodm0pCisgICAgOiBCYXNl
KHZtKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9w
SWZOZWNlc3NhcnlUaW1lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvcElmTmVj
ZXNzYXJ5VGltZXIuaAppbmRleCBhNjgzMTg0NzQ4OWM4NmMzNmI2ODllMThkYTA0ODYzYTFlNGVl
NDQ1Li5lMTgzNmExNGM4ZWQ1MmEyNThmNDYyMDcyMzViMDU0YjljYTJhZWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9wSWZOZWNlc3NhcnlUaW1lci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmgKQEAgLTI1
LDE0ICsyNSwxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhlYXBUaW1lci5oIgor
I2luY2x1ZGUgIkpTUnVuTG9vcFRpbWVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBI
ZWFwOwogCi1jbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lciA6IHB1YmxpYyBIZWFwVGltZXIgewor
Y2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgewogcHVi
bGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKICAgICBleHBsaWNpdCBTdG9w
SWZOZWNlc3NhcnlUaW1lcihWTSopOwogICAgIAogICAgIHZvaWQgZG9Xb3JrKCkgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJvbmdJbmxpbmVzLmgKaW5kZXggNmI4MTk3
YzY4NjZhMDU5OTViMzJhODhiZTc5NDFkZDBmZDFiOTBhNi4uMjA1ZmIwNGZiNjkxNDdkOGZkNWU3
MmFlMTBhMDMyZDUxZTEzZDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Ryb25nSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9u
Z0lubGluZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGFkNGEzMTQwOGE2YjM1YjI5ZDNjNTRiOTFhMzY5MGU1
ZTUwMTBhNDcuLmRkNmNhZmQwNzdmZGExMmE1YmFjMzQ5YzJlNWM5NTUwNzY2N2JhOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlBy
b3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oIgogI2lu
Y2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKQEAgLTczLDggKzc0LDkgQEAKICNpbmNsdWRlICJU
ZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRl
ICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2FzbVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBsYW5JbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5o
PgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC05MDcsOCArOTA5LDggQEAgY29uc3QgQ2xhc3NJbmZv
IERPTUpJVEdldHRlckNvbXBsZXg6OnNfaW5mbyA9IHsgIkRPTUpJVEdldHRlckNvbXBsZXgiLCAm
QmFzZTo6c18KIGNvbnN0IENsYXNzSW5mbyBET01KSVRGdW5jdGlvbk9iamVjdDo6c19pbmZvID0g
eyAiRE9NSklURnVuY3Rpb25PYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKERPTUpJVEZ1bmN0aW9uT2JqZWN0KSB9OwogY29uc3QgQ2xhc3NJbmZvIFJ1
bnRpbWVBcnJheTo6c19pbmZvID0geyAiUnVudGltZUFycmF5IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShSdW50aW1lQXJyYXkpIH07CiBjb25zdCBDbGFzc0lu
Zm8gU2ltcGxlT2JqZWN0OjpzX2luZm8gPSB7ICJTaW1wbGVPYmplY3QiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNpbXBsZU9iamVjdCkgfTsKLXN0YXRpYyBi
b29sIHRlc3QyNjJBc3luY1Bhc3NlZCB7IGZhbHNlIH07Ci1zdGF0aWMgYm9vbCB0ZXN0MjYyQXN5
bmNUZXN0IHsgZmFsc2UgfTsKK3N0YXRpYyB1bnNpZ25lZCBhc3luY1Rlc3RQYXNzZXMgeyAwIH07
CitzdGF0aWMgdW5zaWduZWQgYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMgeyAwIH07CiAKIEVsZW1l
bnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewpAQCAtMTA3Nyw2ICsxMDc5
LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGlu
Z1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXQKICNlbmRpZgogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKTsKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQXN5bmNUZXN0U3RhcnQo
RXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkFzeW5jVGVzdFBhc3NlZChFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1
bGVGdW5jdGlvbnMoRXhlY1N0YXRlKik7CkBAIC0xMzQ5LDYgKzEzNTMsOSBAQCBwcm90ZWN0ZWQ6
CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJtYXhBcmd1bWVudHMiLCBmdW5jdGlvbk1heEFy
Z3VtZW50cywgMCk7CiAKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJhc3luY1Rlc3RTdGFydCIs
IGZ1bmN0aW9uQXN5bmNUZXN0U3RhcnQsIDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFz
eW5jVGVzdFBhc3NlZCIsIGZ1bmN0aW9uQXN5bmNUZXN0UGFzc2VkLCAxKTsKKwogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJ0ZXN0V2FzbU1vZHVsZUZ1
bmN0aW9ucyIsIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMsIDApOwogI2VuZGlmCkBA
IC0xNzMyLDExICsxNzM5LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgRklMRSogb3V0KQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHRlc3Qy
NjJBc3luY1Rlc3QpIHsKKyAgICBpZiAoYXN5bmNUZXN0RXhwZWN0ZWRQYXNzZXMpIHsKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgICAgICBpZiAodmFsdWUu
aXNTdHJpbmcoKSAmJiBXVEY6OmVxdWFsKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykuaW1w
bCgpLCAiVGVzdDI2MjpBc3luY1Rlc3RDb21wbGV0ZSIpKQotICAgICAgICAgICAgdGVzdDI2MkFz
eW5jUGFzc2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkgJiYgV1RGOjplcXVhbChhc1N0
cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgIlRlc3QyNjI6QXN5bmNUZXN0Q29tcGxl
dGUiKSkgeworICAgICAgICAgICAgYXN5bmNUZXN0UGFzc2VzKys7CisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7
CkBAIC0zMDQ5LDYgKzMwNTcsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoSlNDOjptYXhBcmd1bWVudHMpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkFzeW5jVGVzdFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEpTVmFsdWUgbnVtYmVyT2ZBc3luY1Bhc3NlcyA9IGV4ZWMtPmFyZ3VtZW50
KDApOworICAgIGlmICghbnVtYmVyT2ZBc3luY1Bhc3Nlcy5pc1VJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkV4cGVjdGVkIGZp
cnN0IGFyZ3VtZW50IHRvIGEgdWludDMyIikpOworCisgICAgYXN5bmNUZXN0RXhwZWN0ZWRQYXNz
ZXMgKz0gbnVtYmVyT2ZBc3luY1Bhc3Nlcy5hc1VJbnQzMigpOworICAgIHJldHVybiBlbmNvZGVk
SlNVbmRlZmluZWQoKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkFzeW5jVGVzdFBhc3NlZChFeGVjU3RhdGUqKQoreworICAgIGFzeW5jVGVzdFBhc3NlcysrOwor
ICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKK30KKwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAogc3RhdGljIENTdHJpbmcgdmFsdWVXaXRoVHlwZU9mV2FzbVZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHdhc21WYWx1ZSkKQEAgLTMx
NTksMjEgKzMxODYsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqIGUKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IGZ1bmN0aW9uQ291bnQgKyAyKQogICAgICAgICBDUkFTSCgpOwog
Ci0gICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+
dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpKTsKLSAgICBwbGFuLnJ1bigpOwotICAgIGlmIChw
bGFuLmZhaWxlZCgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIG1vZHVs
ZTogIiwgcGxhbi5lcnJvck1lc3NhZ2UoKSk7CisgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBh
ZG9wdFJlZigqbmV3IFdhc206OlBsYW4odm0sIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihzb3VyY2Ut
PnZlY3RvcigpKSwgc291cmNlLT5sZW5ndGgoKSwgV2FzbTo6UGxhbjo6RnVsbENvbXBpbGUsIFdh
c206OlBsYW46OmRvbnRGaW5hbGl6ZSkpOworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5x
dWV1ZShwbGFuLmNvcHlSZWYoKSk7CisgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4uZ2V0KCkpOworICAgIGlmIChwbGFuLT5mYWlsZWQoKSkg
eworICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSBtb2R1bGU6ICIsIHBsYW4tPmVy
cm9yTWVzc2FnZSgpKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpZiAocGxhbi5p
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQorICAgIGlmIChwbGFuLT5p
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQogICAgICAgICBDUkFTSCgp
OwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgY2FsbGVlczsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBrZWVwQWxpdmU7CiAgICAgewogICAgICAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBV
SU5UX01BWDsKLSAgICAgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksCisgICAgICAgIHBsYW4tPmluaXRpYWxpemVDYWxsZWVzKAogICAgICAgICAg
ICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsZWVJbmRleCB8fCAoY2FsbGVl
SW5kZXggLSAxID09IGxhc3RJbmRleCkpOwogICAgICAgICAgICAgICAgIGNhbGxlZXMuYXBwZW5k
KGpzRW50cnlwb2ludENhbGxlZSk7CkBAIC0zMTgxLDcgKzMyMDksNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4
ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAg
ICAgICAgICAgfSk7CiAgICAgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5m
b3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeSk7CiAKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7CkBAIC0zNjY2LDcgKzM2OTQsNyBAQCB2b2lk
IENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItLXRlc3QyNjItYXN5bmMiKSkgewot
ICAgICAgICAgICAgdGVzdDI2MkFzeW5jVGVzdCA9IHRydWU7CisgICAgICAgICAgICBhc3luY1Rl
c3RFeHBlY3RlZFBhc3NlcysrOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApA
QCAtMzczOCw0OCArMzc2Niw2NCBAQCBpbnQgcnVuSlNDKENvbW1hbmRMaW5lIG9wdGlvbnMsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiAgICAgV29ya2VyIHdvcmtlcihXb3JrZXJzOjpzaW5nbGV0b24oKSk7
CiAgICAgCiAgICAgVk0mIHZtID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKCZ2bSk7Ci0KICAgICBpbnQgcmVzdWx0OwotICAgIGlmIChv
cHRpb25zLm1fcHJvZmlsZSAmJiAhdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICB2
bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb2ZpbGVyOjpEYXRh
YmFzZT4odm0pOworICAgIGJvb2wgc3VjY2VzczsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxP
YmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVs
bCgpKSwgb3B0aW9ucy5tX2FyZ3VtZW50cyk7Ci0gICAgZ2xvYmFsT2JqZWN0LT5zZXRSZW1vdGVE
ZWJ1Z2dpbmdFbmFibGVkKG9wdGlvbnMubV9lbmFibGVSZW1vdGVEZWJ1Z2dpbmcpOwotICAgIGJv
b2wgc3VjY2VzcyA9IGZ1bmModm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKG9wdGlvbnMubV9p
bnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQotICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmpl
Y3QpOworICAgICAgICBpZiAob3B0aW9ucy5tX3Byb2ZpbGUgJiYgIXZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcikKKyAgICAgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8UHJvZmlsZXI6OkRhdGFiYXNlPih2bSk7CiAKLSAgICB2bS5kcmFpbk1pY3JvdGFz
a3MoKTsKLSAgICByZXN1bHQgPSBzdWNjZXNzICYmICh0ZXN0MjYyQXN5bmNUZXN0ID09IHRlc3Qy
NjJBc3luY1Bhc3NlZCkgPyAwIDogMzsKKyAgICAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGpzTnVsbCgpKSwgb3B0aW9ucy5tX2FyZ3VtZW50cyk7CisgICAgICAgIGdsb2JhbE9i
amVjdC0+c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChvcHRpb25zLm1fZW5hYmxlUmVtb3RlRGVi
dWdnaW5nKTsKKyAgICAgICAgc3VjY2VzcyA9IGZ1bmModm0sIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIGlmIChvcHRpb25zLm1faW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKKyAgICAgICAgICAgIHJ1
bkludGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CisKKyAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tz
KCk7CisgICAgfQorI2lmIFVTRShDRikKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+cnVu
UnVuTG9vcCgpOworI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5tX2V4aXRDb2RlKQotICAgICAg
ICBwcmludGYoImpzYyBleGl0aW5nICVkXG4iLCByZXN1bHQpOworICAgIHJlc3VsdCA9IHN1Y2Nl
c3MgJiYgKGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzID09IGFzeW5jVGVzdFBhc3NlcykgPyAwIDog
MzsKKworICAgIGlmIChvcHRpb25zLm1fZXhpdENvZGUpIHsKKyAgICAgICAgcHJpbnRmKCJqc2Mg
ZXhpdGluZyAlZCIsIHJlc3VsdCk7CisgICAgICAgIGlmIChhc3luY1Rlc3RFeHBlY3RlZFBhc3Nl
cyAhPSBhc3luY1Rlc3RQYXNzZXMpCisgICAgICAgICAgICBwcmludGYoIiBiZWNhdXNlIGV4cGVj
dGVkOiAlZCBhc3luYyB0ZXN0IHBhc3NlcyBidXQgZ290OiAlZCBhc3luYyB0ZXN0IHBhc3NlcyIs
IGFzeW5jVGVzdEV4cGVjdGVkUGFzc2VzLCBhc3luY1Rlc3RQYXNzZXMpOworICAgICAgICBwcmlu
dGYoIlxuIik7CisgICAgfQogCiAgICAgaWYgKG9wdGlvbnMubV9wcm9maWxlKSB7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgICAgICBpZiAoIXZtLm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+c2F2ZShvcHRpb25zLm1fcHJvZmlsZXJPdXRwdXQudXRmOCgpLmRhdGEoKSkpCiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBzYXZlIHByb2ZpbGVyIG91dHB1
dC5cbiIpOwogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUV4
Y2VwdGlvbkZ1enooKSkKLSAgICAgICAgcHJpbnRmKCJKU0MgRVhDRVBUSU9OIEZVWlo6IGVuY291
bnRlcmVkICV1IGNoZWNrcy5cbiIsIG51bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrcygpKTsKLSAg
ICBib29sIGZpcmVBdEVuYWJsZWQgPQotICAgIE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enpBdCgpIHx8IE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdE9y
QWZ0ZXIoKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkg
JiYgKCFmaXJlQXRFbmFibGVkIHx8IE9wdGlvbnM6OnZlcmJvc2VFeGVjdXRhYmxlQWxsb2NhdGlv
bkZ1enooKSkpCi0gICAgICAgIHByaW50ZigiSlNDIEVYRUNVVEFCTEUgQUxMT0NBVElPTiBGVVpa
OiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ekNoZWNrcygpKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKSkgewotICAg
ICAgICBwcmludGYoIkpTQyBPU1IgRVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAldSBzdGF0aWMgY2hl
Y2tzLlxuIiwgbnVtYmVyT2ZTdGF0aWNPU1JFeGl0RnV6ekNoZWNrcygpKTsKLSAgICAgICAgcHJp
bnRmKCJKU0MgT1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgZHluYW1pYyBjaGVja3MuXG4i
LCBudW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKCkpOwotICAgIH0KLQotICAgIGF1dG8gY29tcGls
ZVRpbWVTdGF0cyA9IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpOwotICAgIFZlY3RvcjxDU3RyaW5n
PiBjb21waWxlVGltZUtleXM7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGNvbXBpbGVUaW1lU3Rh
dHMpCi0gICAgICAgIGNvbXBpbGVUaW1lS2V5cy5hcHBlbmQoZW50cnkua2V5KTsKLSAgICBzdGQ6
OnNvcnQoY29tcGlsZVRpbWVLZXlzLmJlZ2luKCksIGNvbXBpbGVUaW1lS2V5cy5lbmQoKSk7Ci0g
ICAgZm9yIChDU3RyaW5nIGtleSA6IGNvbXBpbGVUaW1lS2V5cykKLSAgICAgICAgcHJpbnRmKCIl
NDBzOiAlLjNsZiBtc1xuIiwga2V5LmRhdGEoKSwgY29tcGlsZVRpbWVTdGF0cy5nZXQoa2V5KSk7
CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVYQ0VQ
VElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1
enpDaGVja3MoKSk7CisgICAgICAgIGJvb2wgZmlyZUF0RW5hYmxlZCA9CisgICAgICAgIE9wdGlv
bnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpBdCgpIHx8IE9wdGlvbnM6OmZpcmVFeGVj
dXRhYmxlQWxsb2NhdGlvbkZ1enpBdE9yQWZ0ZXIoKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpICYmICghZmlyZUF0RW5hYmxlZCB8fCBPcHRpb25z
Ojp2ZXJib3NlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkpKQorICAgICAgICAgICAgcHJpbnRm
KCJKU0MgRVhFQ1VUQUJMRSBBTExPQ0FUSU9OIEZVWlo6IGVuY291bnRlcmVkICV1IGNoZWNrcy5c
biIsIG51bWJlck9mRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tzKCkpOworICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKSkgeworICAgICAgICAgICAgcHJpbnRmKCJKU0Mg
T1NSIEVYSVQgRlVaWjogZW5jb3VudGVyZWQgJXUgc3RhdGljIGNoZWNrcy5cbiIsIG51bWJlck9m
U3RhdGljT1NSRXhpdEZ1enpDaGVja3MoKSk7CisgICAgICAgICAgICBwcmludGYoIkpTQyBPU1Ig
RVhJVCBGVVpaOiBlbmNvdW50ZXJlZCAldSBkeW5hbWljIGNoZWNrcy5cbiIsIG51bWJlck9mT1NS
RXhpdEZ1enpDaGVja3MoKSk7CisgICAgICAgIH0KKworICAgICAgICAKKyAgICAgICAgYXV0byBj
b21waWxlVGltZVN0YXRzID0gSklUOjpjb21waWxlVGltZVN0YXRzKCk7CisgICAgICAgIFZlY3Rv
cjxDU3RyaW5nPiBjb21waWxlVGltZUtleXM7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBj
b21waWxlVGltZVN0YXRzKQorICAgICAgICAgICAgY29tcGlsZVRpbWVLZXlzLmFwcGVuZChlbnRy
eS5rZXkpOworICAgICAgICBzdGQ6OnNvcnQoY29tcGlsZVRpbWVLZXlzLmJlZ2luKCksIGNvbXBp
bGVUaW1lS2V5cy5lbmQoKSk7CisgICAgICAgIGZvciAoQ1N0cmluZyBrZXkgOiBjb21waWxlVGlt
ZUtleXMpCisgICAgICAgICAgICBwcmludGYoIiU0MHM6ICUuM2xmIG1zXG4iLCBrZXkuZGF0YSgp
LCBjb21waWxlVGltZVN0YXRzLmdldChrZXkpKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChP
cHRpb25zOjpnY0F0RW5kKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAppbmRleCA2OTY3ZTAzYWZlMTU0MjQ0ZDFlMmQwY2Iw
M2E0NjEwODk0MDUwMWQ1Li4xZGEwNjAxZjg5NzhlMTBmZjg5M2NhMzFlMWIzZThmYmRkMjUyYzZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVm
ZXJyZWQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtOTksMTEgKzEwMCwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2FsbEZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNWYWx1ZSB2YWx1ZQogdm9pZCBKU1By
b21pc2VEZWZlcnJlZDo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIG1fcmVzb2x2ZS5nZXQoKSwgdmFsdWUpOworICAgIGJv
b2wgd2FzUGVuZGluZyA9IGV4ZWMtPnZtKCkucHJvbWlzZURlZmVycmVkVGltZXItPmNhbmNlbFBl
bmRpbmdQcm9taXNlKHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQod2FzUGVuZGluZywgd2FzUGVu
ZGluZyA9PSBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyk7CiB9CiAKIHZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVhc29uKQogewogICAgIGNh
bGxGdW5jdGlvbihleGVjLCBtX3JlamVjdC5nZXQoKSwgcmVhc29uKTsKKyAgICBib29sIHdhc1Bl
bmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5jZWxQZW5kaW5nUHJv
bWlzZSh0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHdhc1BlbmRpbmcsIHdhc1BlbmRpbmcgPT0g
bV9wcm9taXNlSXNBc3luY1BlbmRpbmcpOwogfQogCiB2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIHJlYXNvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCmluZGV4IDI2ZjRhODJk
MDhjYTAyMjBlZGQ1MTk2ODUyOTgyMmJjYWI5YWM2ZmQuLjA5MjJhOTRkOTMzY2NlYzU5YTRhMTdm
Y2JkMjJjMzcyM2RhNTBjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlRGVmZXJyZWQuaApAQCAtNTYsNiArNTYsMTAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopOwogCisj
aWZuZGVmIE5ERUJVRworICAgIHZvaWQgcHJvbWlzZUFzeW5jUGVuZGluZygpIHsgbV9wcm9taXNl
SXNBc3luY1BlbmRpbmcgPSB0cnVlOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIEpTUHJv
bWlzZURlZmVycmVkKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CkBAIC02NCw2ICs2OCwxMCBAQCBwcm90
ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEpTUHJvbWlzZURlZmVycmVkKFZNJik7CiAKKyNpZm5kZWYg
TkRFQlVHCisgICAgYm9vbCBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyB7IGZhbHNlIH07CisjZW5k
aWYKKwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9wcm9taXNlOwogICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtX3Jlc29sdmU7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVq
ZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29w
VGltZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSdW5Mb29wVGltZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFmYzEzOTFhNjYyNmIzODhmMTRlMTgyYzcyYWFlM2NlNmI3NmU4NDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1J1bkxv
b3BUaW1lci5jcHAKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNSdW5Mb29wVGltZXIuaCIKKworI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShH
TElCKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IFVTRShDRikKKworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgSlNSdW5Mb29wVGltZXI6OnNfZGVjYWRl
ID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CisKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BU
aW1lcihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9hcGlMb2NrKCZ2bS0+YXBpTG9j
aygpKQoreworICAgIHNldFJ1bkxvb3Aodm0tPmhlYXAucnVuTG9vcCgpKTsKK30KKwordm9pZCBK
U1J1bkxvb3BUaW1lcjo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKK3sKKyAgICBp
ZiAobV9ydW5Mb29wKSB7CisgICAgICAgIENGUnVuTG9vcFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5n
ZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICAgICAgQ0ZS
dW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOworICAgICAgICBtX3J1bkxvb3Au
Y2xlYXIoKTsKKyAgICAgICAgbV90aW1lci5jbGVhcigpOworICAgIH0KKworICAgIGlmIChydW5M
b29wKSB7CisgICAgICAgIG1fcnVuTG9vcCA9IHJ1bkxvb3A7CisgICAgICAgIG1lbXNldCgmbV9j
b250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGltZXJDb250ZXh0KSk7CisgICAgICAgIG1fY29u
dGV4dC5pbmZvID0gdGhpczsKKyAgICAgICAgbV90aW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGlt
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
KyBzX2RlY2FkZSwgc19kZWNhZGUsIDAsIDAsIEpTUnVuTG9vcFRpbWVyOjp0aW1lckRpZEZpcmUs
ICZtX2NvbnRleHQpKTsKKyAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgp
LCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIH0KK30KKworSlNS
dW5Mb29wVGltZXI6On5KU1J1bkxvb3BUaW1lcigpCit7CisgICAgc2V0UnVuTG9vcCgwKTsKK30K
Kwordm9pZCBKU1J1bkxvb3BUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2
b2lkKiBjb250ZXh0UHRyKQoreworICAgIEpTUnVuTG9vcFRpbWVyKiB0aW1lciA9IHN0YXRpY19j
YXN0PEpTUnVuTG9vcFRpbWVyKj4oY29udGV4dFB0cik7CisgICAgdGltZXItPm1fYXBpTG9jay0+
bG9jaygpOworCisgICAgUmVmUHRyPFZNPiB2bSA9IHRpbWVyLT5tX2FwaUxvY2stPnZtKCk7Cisg
ICAgaWYgKCF2bSkgeworICAgICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3
ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgICAgICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2so
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bS5nZXQoKSk7CisgICAgICAgIHRpbWVyLT5kb1dvcmsoKTsKKyAgICB9CisKKyAg
ICB0aW1lci0+bV9hcGlMb2NrLT51bmxvY2soKTsKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6
c2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgQ0ZSdW5Mb29w
VGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJy
ZW50KCkgKyBpbnRlcnZhbEluU2Vjb25kcyk7CisgICAgbV9pc1NjaGVkdWxlZCA9IHRydWU7Cit9
CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVyKCkKK3sKKyAgICBDRlJ1bkxvb3BU
aW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSArIHNfZGVjYWRlKTsKKyAgICBtX2lzU2NoZWR1bGVkID0gZmFsc2U7Cit9CisKKyNlbGlm
IFVTRShHTElCKQorCitjb25zdCBsb25nIEpTUnVuTG9vcFRpbWVyOjpzX2RlY2FkZSA9IDYwICog
NjAgKiAyNCAqIDM2NSAqIDEwOworCitzdGF0aWMgR1NvdXJjZUZ1bmNzIEpTUnVuTG9vcFRpbWVy
U291cmNlRnVuY3Rpb25zID0geworICAgIG51bGxwdHIsIC8vIHByZXBhcmUKKyAgICBudWxscHRy
LCAvLyBjaGVjaworICAgIC8vIGRpc3BhdGNoCisgICAgW10oR1NvdXJjZSosIEdTb3VyY2VGdW5j
IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KKyAgICB7CisgICAgICAg
IHJldHVybiBjYWxsYmFjayh1c2VyRGF0YSk7CisgICAgfSwKKyAgICBudWxscHRyLCAvLyBmaW5h
bGl6ZQorICAgIG51bGxwdHIsIC8vIGNsb3N1cmVfY2FsbGJhY2sKKyAgICBudWxscHRyLCAvLyBj
bG9zdXJlX21hcnNoYWxsCit9OworCitKU1J1bkxvb3BUaW1lcjo6SlNSdW5Mb29wVGltZXIoVk0q
IHZtKQorICAgIDogbV92bSh2bSkKKyAgICAsIG1fYXBpTG9jaygmdm0tPmFwaUxvY2soKSkKKyAg
ICAsIG1fdGltZXIoYWRvcHRHUmVmKGdfc291cmNlX25ldygmSlNSdW5Mb29wVGltZXJTb3VyY2VG
dW5jdGlvbnMsIHNpemVvZihHU291cmNlKSkpKQoreworICAgIGdfc291cmNlX3NldF9uYW1lKG1f
dGltZXIuZ2V0KCksICJbSmF2YVNjcmlwdENvcmVdIEpTUnVuTG9vcFRpbWVyIik7CisgICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXIuZ2V0KCksIFtdKGdwb2ludGVyIHVzZXJEYXRhKSAt
PiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8mIHJ1bkxvb3BUaW1lciA9ICpzdGF0aWNfY2FzdDxK
U1J1bkxvb3BUaW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3Rp
bWUocnVuTG9vcFRpbWVyLm1fdGltZXIuZ2V0KCksIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBK
U1J1bkxvb3BUaW1lcjo6c19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgICAgIHJ1bkxv
b3BUaW1lci50aW1lckRpZEZpcmUoKTsKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVF
OworICAgIH0sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyLmdl
dCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK0pTUnVuTG9v
cFRpbWVyOjp+SlNSdW5Mb29wVGltZXIoKQoreworICAgIGdfc291cmNlX2Rlc3Ryb3kobV90aW1l
ci5nZXQoKSk7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnRpbWVyRGlkRmlyZSgpCit7Cisg
ICAgbV9hcGlMb2NrLT5sb2NrKCk7CisKKyAgICBpZiAoIW1fYXBpTG9jay0+dm0oKSkgeworICAg
ICAgICAvLyBUaGUgVk0gaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZl
IHVwLgorICAgICAgICBtX2FwaUxvY2stPnVubG9jaygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0pOworICAgICAgICBk
b1dvcmsoKTsKKyAgICB9CisKKyAgICBtX2FwaUxvY2stPnVubG9jaygpOworfQorCit2b2lkIEpT
UnVuTG9vcFRpbWVyOjpzY2hlZHVsZVRpbWVyKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKK3sK
KyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9tb25vdG9u
aWNfdGltZSgpICsgaW50ZXJ2YWxJblNlY29uZHMgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgbV9p
c1NjaGVkdWxlZCA9IHRydWU7Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OmNhbmNlbFRpbWVy
KCkKK3sKKyAgICBnX3NvdXJjZV9zZXRfcmVhZHlfdGltZShtX3RpbWVyLmdldCgpLCBnX2dldF9t
b25vdG9uaWNfdGltZSgpICsgc19kZWNhZGUgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgbV9pc1Nj
aGVkdWxlZCA9IGZhbHNlOworfQorI2Vsc2UKK0pTUnVuTG9vcFRpbWVyOjpKU1J1bkxvb3BUaW1l
cihWTSogdm0pCisgICAgOiBtX3ZtKHZtKQoreworfQorCitKU1J1bkxvb3BUaW1lcjo6fkpTUnVu
TG9vcFRpbWVyKCkKK3sKK30KKwordm9pZCBKU1J1bkxvb3BUaW1lcjo6aW52YWxpZGF0ZSgpCit7
Cit9CisKK3ZvaWQgSlNSdW5Mb29wVGltZXI6OnNjaGVkdWxlVGltZXIoZG91YmxlKQoreworfQor
Cit2b2lkIEpTUnVuTG9vcFRpbWVyOjpjYW5jZWxUaW1lcigpCit7Cit9CisjZW5kaWYKKyAgICAK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSdW5Mb29wVGltZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNlY2I5Y2JjNDNiODBkMzFlZjhiNmIwNDljMTdl
ZjVhYzRmY2I4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUnVuTG9vcFRpbWVyLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVG
b3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShHTElCKQorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNMb2NrOworY2xhc3MgVk07CisKK2NsYXNzIEpTUnVuTG9vcFRpbWVyIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpTUnVuTG9vcFRpbWVyPiB7CitwdWJsaWM6CisgICAgSlNS
dW5Mb29wVGltZXIoVk0qKTsKKyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIHZvaWQgdGltZXJEaWRG
aXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKik7CisjZW5kaWYKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgfkpTUnVuTG9vcFRpbWVyKCk7CisgICAgdmlydHVhbCB2b2lkIGRvV29y
aygpID0gMDsKKworICAgIHZvaWQgc2NoZWR1bGVUaW1lcihkb3VibGUgaW50ZXJ2YWxJblNlY29u
ZHMpOworICAgIHZvaWQgY2FuY2VsVGltZXIoKTsKKyAgICBib29sIGlzU2NoZWR1bGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NjaGVkdWxlZDsgfQorCisjaWYgVVNFKENGKQorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYpOworI2VuZGlmIC8vIFVTRShD
RikKKworcHJvdGVjdGVkOgorICAgIFZNKiBtX3ZtOworCisgICAgUmVmUHRyPEpTTG9jaz4gbV9h
cGlMb2NrOworICAgIGJvb2wgbV9pc1NjaGVkdWxlZCB7IGZhbHNlIH07CisjaWYgVVNFKENGKQor
ICAgIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzX2RlY2FkZTsKKworICAgIFJldGFpblB0
cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVm
PiBtX3J1bkxvb3A7CisKKyAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OworCisg
ICAgTG9jayBtX3NodXRkb3duTXV0ZXg7CisjZWxpZiBVU0UoR0xJQikKKyAgICBzdGF0aWMgY29u
c3QgbG9uZyBzX2RlY2FkZTsKKyAgICB2b2lkIHRpbWVyRGlkRmlyZSgpOworICAgIEdSZWZQdHI8
R1NvdXJjZT4gbV90aW1lcjsKKyNlbmRpZgorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGludmFs
aWRhdGUoKTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBkYTk5NmVhYTNjNmNjYjYwYmYxMDhiNjk5NzM4NDI2
ZjcxYTQ5NjdjLi5hMGQ5MTA5MGU2MmJjZGIyNjYxYzI4NmQzNDQ2NzI3YzkxNTE0ZTY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC0yNTIsNiArMjUyLDcgQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgbnVtYmVy
T2ZGVExDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoOCwgMikg
LSAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGludDMyLCBwcmlvcml0eURlbHRhT2ZERkdD
b21waWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAw
KSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihpbnQzMiwgcHJpb3JpdHlEZWx0YU9mRlRMQ29t
cGlsZXJUaHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMiwgMCks
IE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoaW50MzIsIHByaW9yaXR5RGVsdGFPZldhc21Db21w
aWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAwKSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlUHJvZmlsZXIsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlciwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkBAIC00MjgsNiArNDI5LDkgQEAgdHlw
ZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VDb2RlQ2FjaGUs
IHRydWUsIE5vcm1hbCwgIklmIGZhbHNlLCB0aGUgdW5saW5rZWQgYnl0ZSBjb2RlIGNhY2hlIHdp
bGwgbm90IGJlIHVzZWQuIikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5LCB0
cnVlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBvYmplY3QuIikgXAor
ICAgIFwKKyAgICB2KGJvb2wsIGZhaWxUb0NvbXBpbGVXZWJBc3NlbWJseUNvZGUsIGZhbHNlLCBO
b3JtYWwsICJJZiB0cnVlLCBubyBXYXNtOjpQbGFuIHdpbGwgc3VjZXNzZnVsbHkgY29tcGlsZSBh
IGZ1bmN0aW9uLiIpIFwKKyAgICBcCiAgICAgdihib29sLCBzaW11bGF0ZVdlYkFzc2VtYmx5TG93
TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd29uJ3Qg
bW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5kIGluc3RlYWQgd2lsbCBhbGxvY2F0ZSB0
aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1i
bHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2Ug
YSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNo
ZWNrIHdhc20gbWVtb3J5LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdFRMUywg
dHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGZhc3QgdGhyZWFkLWxv
Y2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1l
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1l
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzRhZjY5MTc5YTJjMGFhZjg1YWFiOThiMWRhZGQwMmM4ODM3ODA3
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb21p
c2VEZWZlcnJlZFRpbWVyLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgorCisjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQu
aCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworUHJvbWlzZURlZmVycmVkVGltZXI6OlByb21pc2VEZWZlcnJl
ZFRpbWVyKFZNJiB2bSkKKyAgICA6IEJhc2UoJnZtKQoreworfQorCit2b2lkIFByb21pc2VEZWZl
cnJlZFRpbWVyOjpkb1dvcmsoKQoreworICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKKyAg
ICBjYW5jZWxUaW1lcigpOworICAgIGlmICghbV9ydW5UYXNrcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgd2hpbGUgKCFtX3Rhc2tzLmlzRW1wdHkoKSkgeworICAgICAgICBKU1Byb21pc2VEZWZl
cnJlZCogdGlja2V0OworICAgICAgICBUYXNrIHRhc2s7CisgICAgICAgIHN0ZDo6dGllKHRpY2tl
dCwgdGFzaykgPSBtX3Rhc2tzLnRha2VMYXN0KCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJEb2luZyB3b3JrIG9uIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAg
ICAgICAgLy8gV2UgbWF5IGhhdmUgYWxyZWFkeSBjYW5jZWxlZCB0aGVzZSBwcm9taXNlcy4KKyAg
ICAgICAgaWYgKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKHRpY2tldCkpIHsKKyAgICAgICAg
ICAgIHRhc2soKTsKKyAgICAgICAgICAgIG1fdm0tPmRyYWluTWljcm90YXNrcygpOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byB3YWl0aW5nVGFza3MgPSBtX2Jsb2NrZWRUYXNrcy50YWtlKHRp
Y2tldCk7CisgICAgICAgIGZvciAoY29uc3QgVGFzayYgdW5ibG9ja2VkVGFzayA6IHdhaXRpbmdU
YXNrcykgeworICAgICAgICAgICAgdW5ibG9ja2VkVGFzaygpOworICAgICAgICAgICAgbV92bS0+
ZHJhaW5NaWNyb3Rhc2tzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBVU0UoQ0YpCisgICAg
aWYgKG1fcGVuZGluZ1Byb21pc2VzLmlzRW1wdHkoKSAmJiBtX3Nob3VsZFN0b3BSdW5Mb29wV2hl
bkFsbFByb21pc2VzRmluaXNoKQorICAgICAgICBDRlJ1bkxvb3BTdG9wKG1fcnVuTG9vcC5nZXQo
KSk7CisjZW5kaWYKK30KKworI2lmIFVTRShDRikKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6
OnJ1blJ1bkxvb3AoKQoreworICAgIEFTU0VSVCghbV92bS0+Y3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgQVNTRVJUKENGUnVuTG9vcEdldEN1cnJlbnQoKSA9PSBtX3J1bkxv
b3AuZ2V0KCkpOworICAgIG1fc2hvdWxkU3RvcFJ1bkxvb3BXaGVuQWxsUHJvbWlzZXNGaW5pc2gg
PSB0cnVlOworICAgIGlmIChtX3BlbmRpbmdQcm9taXNlcy5zaXplKCkpCisgICAgICAgIENGUnVu
TG9vcFJ1bigpOworfQorI2VuZGlmCisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OmFkZFBl
bmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFZlY3RvcjxTdHJvbmc8SlND
ZWxsPj4mJiBkZXBlbmRlbmNpZXMpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXBlbmRl
bmNpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIEFTU0VSVChkZXBlbmRlbmNpZXNbaV0uZ2V0KCkg
IT0gdGlja2V0KTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMuYWRkKHRp
Y2tldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PigpKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkFkZGluZyBuZXcgcGVuZGluZyBw
cm9taXNlOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICBkZXBlbmRlbmNpZXMuYXBw
ZW5kKFN0cm9uZzxKU0NlbGw+KCptX3ZtLCB0aWNrZXQpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFdURk1vdmUoZGVwZW5kZW5jaWVzKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQWRkaW5nIG5ldyBkZXBlbmRlbmNpZXMgZm9yIHByb21p
c2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kVmVjdG9yKGRlcGVuZGVuY2llcyk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRwor
ICAgIHRpY2tldC0+cHJvbWlzZUFzeW5jUGVuZGluZygpOworI2VuZGlmCit9CisKK2Jvb2wgUHJv
bWlzZURlZmVycmVkVGltZXI6OmNhbmNlbFBlbmRpbmdQcm9taXNlKEpTUHJvbWlzZURlZmVycmVk
KiB0aWNrZXQpCit7CisgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElM
b2NrKCkpOworICAgIGJvb2wgcmVzdWx0ID0gbV9wZW5kaW5nUHJvbWlzZXMucmVtb3ZlKHRpY2tl
dCk7CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ2Fu
Y2VsaW5nIHByb21pc2U6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisKKyAgICBhdXRvIGJsb2Nr
ZWRUYXNrcyA9IG1fYmxvY2tlZFRhc2tzLnRha2UodGlja2V0KTsKKyAgICBmb3IgKGNvbnN0IFRh
c2smIHRhc2sgOiBibG9ja2VkVGFza3MpCisgICAgICAgIHRhc2soKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIFByb21pc2VEZWZlcnJlZFRpbWVyOjpzY2hlZHVsZVdvcmtTb29uKEpT
UHJvbWlzZURlZmVycmVkKiB0aWNrZXQsIFRhc2smJiB0YXNrKQoreworICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fdGFza0xvY2spOworICAgIG1fdGFza3MuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZSh0
aWNrZXQsIFdURk1vdmUodGFzaykpKTsKKyAgICBpZiAoIWlzU2NoZWR1bGVkKCkpCisgICAgICAg
IHNjaGVkdWxlVGltZXIoMCk7Cit9CisKK3ZvaWQgUHJvbWlzZURlZmVycmVkVGltZXI6OnNjaGVk
dWxlQmxvY2tlZFRhc2soSlNQcm9taXNlRGVmZXJyZWQqIGJsb2NraW5nVGlja2V0LCBUYXNrJiYg
dGFzaykKK3sKKyAgICBBU1NFUlQobV92bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ1Byb21pc2VzLmNvbnRhaW5zKGJsb2NraW5nVGlja2V0
KSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Jsb2NrZWRUYXNrcy5hZGQoYmxvY2tpbmdUaWNrZXQs
IFZlY3RvcjxUYXNrPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZN
b3ZlKHRhc2spKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
YzNjMzNlYjg3MmRlMDA3ZDNhZjFmZGE4YWViMDdmOTUwNDQ0OTM2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuaApA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1J1bkxvb3BUaW1lci5oIgorI2luY2x1
ZGUgIlN0cm9uZy5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNQcm9taXNlRGVmZXJyZWQ7CitjbGFzcyBWTTsKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3Mg
UHJvbWlzZURlZmVycmVkVGltZXIgOiBwdWJsaWMgSlNSdW5Mb29wVGltZXIgeworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKKworICAgIFByb21pc2VEZWZlcnJlZFRp
bWVyKFZNJik7CisKKyAgICB2b2lkIGRvV29yaygpIG92ZXJyaWRlOworCisgICAgdm9pZCBhZGRQ
ZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4m
JiBkZXBlbmRlbmNpZXMpOworICAgIC8vIEpTUHJvbWlzZURlZmVycmVkIHNob3VsZCBoYW5kbGUg
Y2FuY2VsaW5nIHdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuCisgICAg
Ym9vbCBjYW5jZWxQZW5kaW5nUHJvbWlzZShKU1Byb21pc2VEZWZlcnJlZCopOworCisgICAgdHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gVGFzazsKKyAgICB2b2lkIHNjaGVkdWxlV29ya1Nv
b24oSlNQcm9taXNlRGVmZXJyZWQqLCBUYXNrJiYpOworCisgICAgLy8gQmxvY2tlZCB0YXNrcyBz
aG91bGQgb25seSBiZSByZWdpc3RlcmVkIHdoaWxlIGhvbGRpbmcgdGhlIEpTIEFQSSBsb2NrLiBJ
ZiB3ZSBkaWRuJ3QgcmVxdWlyZSBob2xkaW5nIHRoZQorICAgIC8vIEpTIEFQSSBsb2NrIHRoZW4g
dGhlcmUgbWlnaHQgYmUgYSByYWNlIHdoZXJlIHRoZSBwcm9taXNlIHlvdSBhcmUgd2FpdGluZyBv
biBpcyBydW4gYmVmb3JlIHlvdXIgdGFzayBpcworICAgIC8vIHJlZ2lzdGVyZWQuCisgICAgdm9p
ZCBzY2hlZHVsZUJsb2NrZWRUYXNrKEpTUHJvbWlzZURlZmVycmVkKiwgVGFzayYmKTsKKworICAg
IHZvaWQgc3RvcFJ1bm5pbmdUYXNrcygpIHsgbV9ydW5UYXNrcyA9IGZhbHNlOyB9CisjaWYgVVNF
KENGKQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuUnVuTG9vcCgpOworI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgSGFzaE1hcDxKU1Byb21pc2VEZWZlcnJlZCosIFZlY3RvcjxTdHJvbmc8
SlNDZWxsPj4+IG1fcGVuZGluZ1Byb21pc2VzOworICAgIExvY2sgbV90YXNrTG9jazsKKyAgICBi
b29sIG1fcnVuVGFza3MgeyB0cnVlIH07CisjaWYgVVNFKENGKQorICAgIGJvb2wgbV9zaG91bGRT
dG9wUnVuTG9vcFdoZW5BbGxQcm9taXNlc0ZpbmlzaCB7IGZhbHNlIH07CisjZW5kaWYKKyAgICBW
ZWN0b3I8c3RkOjp0dXBsZTxKU1Byb21pc2VEZWZlcnJlZCosIFRhc2s+PiBtX3Rhc2tzOworICAg
IEhhc2hNYXA8SlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8VGFzaz4+IG1fYmxvY2tlZFRhc2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKaW5kZXggODUxMTU0MmI3N2RmYzhlNmYyYmVhYmYxZjg5M2M3NzM5YWI3NGIzOC4uZmVlMGIz
MzllZjI1NzJhNWFlZDExZGI4NmExMTE0YzQ0NmExOWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcApAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIlBhcnNlci5oIgogI2lu
Y2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1h
cEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCkBAIC0xMDMsNiArMTA0LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgi
CisjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNs
dWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKQEAgLTE3
Nyw2ICsxNzksNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBjbGllbnREYXRhKDApCiAgICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKICAgICAs
IHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCisgICAgLCBwcm9taXNlRGVmZXJy
ZWRUaW1lcihzdGQ6Om1ha2VfdW5pcXVlPFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykpCiAg
ICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gd3RmVGhyZWFkRGF0
YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3RyaW5nVGFibGUpCiAgICAgLCBw
cm9wZXJ0eU5hbWVzKG51bGxwdHIpCiAgICAgLCBlbXB0eUxpc3QobmV3IEFyZ0xpc3QpCkBAIC0z
NTYsNiArMzU5LDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkK
IAogVk06On5WTSgpCiB7CisgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFz
a3MoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKFdhc206OmV4aXN0aW5nV29y
a2xpc3RPck51bGwoKSkKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxh
bnNGb3JWTSgqdGhpcyk7CisjZW5kaWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAg
ICAgICAgIG1fd2F0Y2hkb2ctPndpbGxEZXN0cm95Vk0odGhpcyk7CiAgICAgbV90cmFwcy53aWxs
RGVzdHJveVZNKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5ZDg2YWExOWE5
MzNjZWEzOGFiNWYwMjMxODQ0NTljYjYwMTBmM2I3Li44MWI4MmU5OWE5NGRlZGIzYzNhMWM3YzI2
MzY5ZjZiYzJmMjA5ODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwNiw2
ICsxMDYsNyBAQCBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsK
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Citj
bGFzcyBQcm9taXNlRGVmZXJyZWRUaW1lcjsKIGNsYXNzIFJlZ0V4cENhY2hlOwogY2xhc3MgUmVn
aXN0ZXI7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKQEAgLTM4MCw2ICszODEsNyBAQCBw
dWJsaWM6CiAgICAgc3RkOjpvbmNlX2ZsYWcgbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNl
RmxhZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb24+IG1f
d2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uOwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFBy
b21pc2VEZWZlcnJlZFRpbWVyPiBwcm9taXNlRGVmZXJyZWRUaW1lcjsKICAgICAKICAgICBKU0Nl
bGwqIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CiAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0Q2xhc3NJbmZvOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCBmY2RjOGNkZGM0
ZGE2OGRkOWRjZTE5OTBkOWQ5OTEyZWRkMjlkNjY4Li5iZmZlOGYzOTViZjA3YzQzZDVkZmFkOWZl
ZTYxZWEzYzNiOTY0YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dlYkFzc2VtYmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5LmNwcApAQCAtMzMsMTAgKzMzLDE3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIKIAordXNpbmcgSlNDOjpXYXNt
OjpQbGFuOworCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKEpTV2ViQXNzZW1ibHkpOwpAQCAtNDUsNDUgKzUyLDE2MCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSop
OwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4
ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUluc3Rh
bnRpYXRlRnVuYyhFeGVjU3RhdGUqKTsKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlamVjdChF
eGVjU3RhdGUqIGV4ZWMsIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUsIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlKQoreworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNl
cHRpb24oKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uKTsKKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBjYXRjaFNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgdHJ1bHkgYXN5bmNocm9ub3VzOgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTYKLSAgICBKU1Zh
bHVlIG1vZHVsZSA9IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsK
LSAgICB9CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZm
ZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBl
bmRlbmNpZXM7CisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgZ2xv
YmFsT2JqZWN0KSk7CisgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9t
aXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisKKyAgICBSZWY8UGxhbj4gcGxh
biA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgKnNvdXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3Nv
dXJjZSwgcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9t
aXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBwcm9t
aXNlLCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxlID0g
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5X
ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxh
bikpOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKLSAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7Cisg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZSk7CisgICAgICAgIH0pOwor
ICAgIH0pKTsKKworICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBs
YW4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CiB9
CiAKK2VudW0gY2xhc3MgUmVzb2x2ZSB7IFdpdGhJbnN0YW5jZSwgV2l0aE1vZHVsZUFuZEluc3Rh
bmNlIH07CitzdGF0aWMgdm9pZCByZXNvbHZlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGluc3RhbmNlLT5maW5hbGl6
ZUNyZWF0aW9uKHZtLCBleGVjKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChlbnRyaWVzID09IFJlc29sdmU6OldpdGhJbnN0YW5jZSkKKyAgICAgICAgcHJv
bWlzZS0+cmVzb2x2ZShleGVjLCBpbnN0YW5jZSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwo
Im1vZHVsZSIpKSwgbW9kdWxlKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImluc3RhbmNlIikpLCBpbnN0YW5j
ZSk7CisgICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU09iamVj
dCogaW1wb3J0T2JqZWN0LCBSZXNvbHZlIGVudHJpZXMpCit7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlh
bGx5IHJlY29tcGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQv
bWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgorICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2
bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBjYXNlczoK
KyAgICAvLyAxKSBUaGUgaW5zdGFuY2UgYWxyZWFkeSBoYXMgYW4gaW5pdGlhbGl6ZWQgQ29kZUJs
b2NrLCBzbyB3ZSBoYXZlIG5vIG1vcmUgd29yayB0byBkby4KKyAgICAvLyAyKSBUaGUgaW5zdGFu
Y2UgaGFzIG5vIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byBtYWtlIG9uZSBhbmQgY29tcGlsZSB0
aGUgY29kZSBmb3IgaXQuCisgICAgLy8gMykgVGhlIGluc3RhbmNlIGFscmVhZHkgaGFzIGFuIHVu
aW5pdGlhbGl6ZWQgQ29kZUJsb2NrLCBzbyBzb21lb25lIGVsc2UgaXMgY29tcGlsaW5nIGNvZGUg
YW5kIHdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciB0aGVtLgorCisgICAgaWYgKGluc3RhbmNlLT5p
bml0aWFsaXplZCgpKSB7CisgICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3Rh
bmNlLCBtb2R1bGUsIGVudHJpZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVj
dG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CisgICAgLy8gVGhlIGluc3RhbmNlIGtl
ZXBzIHRoZSBtb2R1bGUgYWxpdmUuCisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlND
ZWxsPih2bSwgaW5zdGFuY2UpKTsKKyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVu
ZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKworICAgIGlmIChp
bnN0YW5jZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXIt
PnNjaGVkdWxlQmxvY2tlZFRhc2soaW5zdGFuY2UtPmNvZGVCbG9jaygpLT5wbGFuKCkucGVuZGlu
Z1Byb21pc2UoKSwgWyZ2bSwgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllc10gKCkg
eworICAgICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CisgICAgICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwg
bW9kdWxlLCBlbnRyaWVzKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMg
cmVwYXJzZXMgdGhlIG1vZHVsZSBoZWFkZXIsIHdoaWNoIHNob3VsZG4ndCBiZSBuZWNlc3Nhcnku
CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1vZHVsZS0+c291
cmNlKCksIFBsYW46OkZ1bGxDb21waWxlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50
cmllc10gKFBsYW4mIHApIHsKKyAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHAp
OworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtT
b29uKHByb21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzLCBwbGFuID0g
V1RGTW92ZShwbGFuKV0gKCkgeworICAgICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKKyAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOworICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgZW50cmllcyk7CisgICAgICAgIH0pOworICAgIH0pKTsKKworICAgIGluc3Rh
bmNlLT5hZGRVbml0aWFsaXplZENvZGVCbG9jayh2bSwgcGxhbi5jb3B5UmVmKCkpOworICAgIHBs
YW4tPnNldE1vZGVBbmRQcm9taXNlKGluc3RhbmNlLT5tZW1vcnlNb2RlKCksIHByb21pc2UpOwor
ICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKK30KKwor
c3RhdGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0KiBp
bXBvcnRPYmplY3QpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJv
bVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CisKKyAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKKyAg
ICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsK
KyAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwg
V1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBQbGFuKHZtLCAqc291cmNlLCBQbGFuOjpWYWxpZGF0aW9uLCBbc291cmNlLCBwcm9taXNl
LCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdF0gKFBsYW4mIHApIG11dGFibGUgeworICAgICAg
ICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1ha2VSZWYocCk7CisgICAgICAgIHBsYW4tPnZtKCkucHJv
bWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3NvdXJjZSwgcHJv
bWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CisgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0
dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShzb3VyY2UpLCBwbGFuLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21p
c2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaW5zdGFudGlhdGUodm0sIGV4ZWMsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBS
ZXNvbHZlOjpXaXRoTW9kdWxlQW5kSW5zdGFuY2UpOworICAgICAgICB9KTsKKyAgICB9KSk7CisK
KyAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBj
YXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIEFQSSB0cnVseSBhc3luY2hyb25vdXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjkxODcKLQogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKLSAgICBhdXRvIHJlamVjdCA9IFsmXSAoKSB7Ci0gICAgICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlv
bik7Ci0gICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcHJvbWlz
ZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKLSAgICB9OwotCiAgICAgSlNWYWx1ZSBp
bXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICBpZiAoIWltcG9ydEFyZ3Vt
ZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkgewpAQCAtOTMsMjkgKzIxNSwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5j
KEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiAKICAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKLSAgICBKU1ZhbHVlIG1vZHVsZTsKLSAgICBib29sIGZpcnN0QXJn
dW1lbnRJc01vZHVsZSA9IGZhbHNlOwotICAgIGlmIChmaXJzdEFyZ3VtZW50LmluaGVyaXRzKHZt
LCBKU1dlYkFzc2VtYmx5TW9kdWxlOjppbmZvKCkpKSB7Ci0gICAgICAgIGZpcnN0QXJndW1lbnRJ
c01vZHVsZSA9IHRydWU7Ci0gICAgICAgIG1vZHVsZSA9IGZpcnN0QXJndW1lbnQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlTW9kdWxlKGV4ZWMsIGZpcnN0QXJndW1lbnQsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGlmIChjYXRjaFNjb3Bl
LmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgpOwotICAgIH0KLQotICAg
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKGV4ZWMsIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxl
Kj4obW9kdWxlKSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiByZWplY3QoKTsKLQotICAgIGlmIChmaXJzdEFyZ3VtZW50
SXNNb2R1bGUpCi0gICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgaW5zdGFuY2UpOwotICAg
IGVsc2UgewotICAgICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJtb2R1bGUiKSksIG1vZHVsZSk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFs
KCJpbnN0YW5jZSIpKSwgaW5zdGFuY2UpOwotICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMs
IHJlc3VsdCk7Ci0gICAgfQorICAgIGlmIChhdXRvKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZmlyc3RBcmd1bWVudCkpCisgICAgICAgIGluc3RhbnRp
YXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0
aEluc3RhbmNlKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVBbmRJbnN0YW50aWF0ZSh2bSwg
ZXhlYywgcHJvbWlzZSwgZmlyc3RBcmd1bWVudCwgaW1wb3J0T2JqZWN0KTsKIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKIH0KQEAgLTEyOSw3ICsyMzIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5j
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFz
ZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVP
ZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwg
Ynl0ZVNpemUpOworICAgIFdhc206OlBsYW4gcGxhbih2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5
dGVTaXplLCBQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUpOwogICAgIC8vIEZJ
WE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBk
ZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggZmFjNTdhZGRh
ZjA3NGU5YThjZmU2MDYzMzM1ZjMwZGEyZTk2ZDNhMi4uYWI3MjAwZWRkNTMwNGZhMmFjYmQ0OTlk
ODA1ZjNkMWQ5NmExNmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUg
KDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQ
cm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYpOworICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMjIx
LDYgKzIyMSw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFByb2NlZHVy
ZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3RvcjxW
YXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMjU4LDkgKzI1OSwxMCBAQCBzdGF0aWMgdm9pZCBzdG9y
ZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBh
cmcpCiAgICAgICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2
bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBX
YXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUg
bW9kZSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZSht
b2RlKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC00ODYsNyArNDg4LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
IHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFz
ZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nKSB7CisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2lu
ZykgewogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNp
emVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50
ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CkBAIC01
MjIsNyArNTI0LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9w
KQogCiBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2Rl
IG1lbW9yeU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpCisgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAg
ICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7CiAgICAgcmV0dXJuIG1lbW9yeU9wOwog
fQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVy
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW4KICAgICBqaXQu
cmV0KCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlv
bj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWdu
YXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWduZWQgb3B0TGV2ZWwp
CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0
TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPigpOwogCkBAIC0xMjM2LDcgKzEyMzgsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYg
dm0sCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtl
X3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCZ2bSk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwot
ICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0
KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQo
dm0sIGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKCZ2bSwg
Y29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbywg
bW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAyNDlkNTc4MTRhOTI4
YzRiZjkyMDZiYzg1MjU2NGMzNmM3ODg5YTRlLi5kZTU2YTFjM2IyM2M1NzA0ZmUwNTMxOWJkMGE4
NWMzMWU3N2Y5YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
ICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9pZCBk
dW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0aW9u
Q29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5
cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3Rv
cjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25z
dCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlNb2Rl
LCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggOWE3YTY3MjlhNzFm
YmRmMDUxNzRhMWNjYzExYTU2ZjYyNzFkY2ViYy4uNTU2OTQzNWY0MTJlNjZhNmQ3NDhjMzM1OGJi
ZDE1MzUxY2U1MjI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApA
QCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5n
KEV4dGVybmFsS2luZCBraW5kKQogfQogCiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBJZGVudGlmaWVy
IG1vZHVsZTsKLSAgICBJZGVudGlmaWVyIGZpZWxkOworICAgIFN0cmluZyBtb2R1bGU7CisgICAg
U3RyaW5nIGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVkIGtpbmRJ
bmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBraW5kLgog
fTsKIAogc3RydWN0IEV4cG9ydCB7Ci0gICAgSWRlbnRpZmllciBmaWVsZDsKKyAgICBTdHJpbmcg
ZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWduZWQga2luZEluZGV4OyAv
LyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQuCiB9OwpAQCAt
MjYwLDYgKzI2MCw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgfQogCiAgICAg
dWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
cy5zaXplKCk7IH0KIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggZjJiOTQxMTVj
YjY0ZjY3YzZiNTg2MWRlZGM4YzJiOTUzN2M3M2JhMi4uZDQyMDU2MGI3MjRlNGI0NjU1ZDI2YWFj
Y2M3ZDRjZTIxYWQ0Y2E3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihudW1iZXJPZkxvY2FscyksICJjYW4ndCBnZXQgRnVuY3Rpb24ncyBu
dW1iZXIgb2YgbG9jYWxzIGluIGdyb3VwICIsIGkpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG51bWJlck9mTG9jYWxzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwgIkZ1bmN0aW9uIHNlY3Rpb24ncyAiLCBpLCAidGggbG9jYWwgZ3JvdXAgY291bnQgaXMgdG9v
IGJpZyAiLCBudW1iZXJPZkxvY2Fscyk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSwgImNhbid0IGdldCBGdW5jdGlvbiBsb2NhbCdzIHR5
cGUgaW4gZ3JvdXAgIiwgaSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4
dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpLCAiY2FuJ3QgYWRkICIsIG51
bWJlck9mTG9jYWxzLCAiIEZ1bmN0aW9uIGxvY2FscyBmcm9tIGdyb3VwICIsIGkpOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZM
b2NhbHMpKTsKICAgICB9CiAKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQm9k
eSgpKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVpbnQz
Ml90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBm
b3IgZ2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5n
ZXRMb2NhbChpbmRleCwgcmVzdWx0KSwgImNhbid0IGdldF9sb2NhbCBhdCBpbmRleCIsIGluZGV4
KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5kZXgsIHJlc3Vs
dCkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkgLT4gUGFydGlhbFJlc3VsdAog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4n
dCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIG1fY29udGV4dC5zZXRHbG9iYWwoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKICAgICBjYXNlIENhbGw6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaAppbmRleCBkMTNkMGM2NjJmOTg5ZDNlZGU0ZTRkZTA5ZjIyNDZjYzc5NzY2YTli
Li40NGRhMGRmYzE3ODRkZGY1YzAwZDdiYjU5NDYzMDZhZTYwYTJiMjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFZNOwog
bmFtZXNwYWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9k
ZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5Mwot
ZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Qg
ewogICAgIEJvdW5kc0NoZWNraW5nLAogICAgIFNpZ25hbGluZywKICAgICBOdW1iZXJPZk1lbW9y
eU1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcAppbmRleCA4YWMwODY2Mjc4YjUxMzkzYjY2OWVhMDlhN2I1NDhkNmQ5YTc2
YjE0Li41OTA5ZmUzZmU4M2MxODgyODkyNTQzNGRlNjU2YWRhYTAxNDE3NzJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3RlckluZm8o
VmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2kKIHsKIH0KIAotTWVtb3J5
SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1v
ZGUsIGJvb2wgaXNJbXBvcnQpCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24o
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sIGlzSW1wb3J0KQogICAg
IDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1f
aXNJbXBvcnQoaXNJbXBvcnQpCkBAIC04MiwyOCArODIsNiBAQCBNZW1vcnlJbmZvcm1hdGlvbjo6
TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdQogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwogICAgIEFTU0VSVCghISp0
aGlzKTsKLQotICAgIGlmICghcmVjb21waWxlTW9kZSkgewotICAgICAgICBpZiAoIWlzSW1wb3J0
KSB7Ci0gICAgICAgICAgICBpZiAobWF4aW11bSAmJiBtYXhpbXVtLmJ5dGVzKCkgPT0gMCkgewot
ICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5p
dGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnkpOwotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKSk7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11bSgpLmJ5dGVzKCkgPT0g
MCk7Ci0gICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9y
ZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1v
cnlNb2RlOjpTaWduYWxpbmcpOwotICAgICAgICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1vcnkpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9yeSk7Ci0gICAgICAgICAg
ICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX21vZGUgPSBNZW1v
cnk6Omxhc3RBbGxvY2F0ZWRNb2RlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fbW9kZSA9ICpy
ZWNvbXBpbGVNb2RlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAppbmRleCA2
ZGUwNzBhMTA0NTJmZjZiYjNjNWMyNTA0MTFmMTBlOTEzODllNGEyLi5kMTgyYzczY2Q2NTM4OGNh
ZDY1OWY1N2ZhZTBjMzI4MzNkZWFlY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMjIgKzU0LDE3IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRp
b24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9u
YWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOworICAgIE1lbW9yeUluZm9ybWF0aW9uKFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCBpc0ltcG9ydCk7CiAKICAg
ICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBh
Z2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgYm9vbCBo
YXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KLSAg
ICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNlcnZl
ZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9Ci0gICAgTWVt
b3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0ltcG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQogCiBwcml2YXRlOgotICAgIFJl
ZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7
IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5TW9kZSBtX21vZGUg
eyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZh
bHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCmluZGV4IDIxZDFkMGM3ZDFlYWFiMmU3MmNiMzdlNzkxMjQ1OGQ1ZmQzZTRjM2Qu
LmU3MzZiYmYyZjE3MzJhZTI4NDg0NGYzNGUyOTk4ODMzY2I4Njg1MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0xNjIsMTEgKzE2
MiwxMSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0
CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBs
ZW5ndGgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmco
bW9kdWxlU3RyaW5nLCBtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCdzIG1vZHVsZSBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4pOwotICAgICAgICBp
bXAubW9kdWxlID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX3ZtLCBtb2R1bGVTdHJpbmcpOwor
ICAgICAgICBpbXAubW9kdWxlID0gbW9kdWxlU3RyaW5nOwogCiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCBpbiBtb2R1bGUgJyIsIG1vZHVs
ZVN0cmluZywgIiciKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhT
dHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIs
ICJ0aCBJbXBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBtb2R1bGVMZW4sICIgaW4gbW9k
dWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIGltcC5maWVsZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBpbXAuZmllbGQgPSBm
aWVsZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFs
S2luZChpbXAua2luZCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3Mg
a2luZCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOwogICAgICAgICBzd2l0Y2ggKGltcC5raW5kKSB7CkBAIC0zMTYsNyArMzE2LDcgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBhZ2VDb3VudCk7CiAgICAgQVNTRVJUKCFt
YXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7
CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKCptX3Zt
LCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBtX21vZGUsIGlzSW1wb3J0KTsK
KyAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQ
YWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9Owog
fQogCkBAIC0zNzYsNyArMzc2LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRG
OFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJl
ciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVsZFN0cmluZyks
ICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIGV4cG9y
dE5hbWVzLmFkZChmaWVsZFN0cmluZyk7Ci0gICAgICAgIGV4cC5maWVsZCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOworICAgICAgICBleHAuZmllbGQgPSBmaWVs
ZFN0cmluZzsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2lu
ZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2lu
ZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnRO
dW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5k
ZXggYzk2MThiNTdjYTQyMmYwMWZlOWY3OWY0YzE3OTUxYTBlYjZiNzUwZS4uNTBhMjg5MzVlZjEz
Zjk2MjBmYTE1Njg0MTc2YjE3ZTg0ZDY2YzJiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtNDQsOSArNDQsOSBAQCBzdHJ1Y3QgTW9kdWxl
UGFyc2VyUmVzdWx0IHsKIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8TW9kdWxl
UGFyc2VyUmVzdWx0PiB7CiBwdWJsaWM6CiAKLSAgICBNb2R1bGVQYXJzZXIoVk0qIHZtLCBjb25z
dCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6b3B0aW9u
YWw8TWVtb3J5TW9kZT4gbW9kZSkKKworICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICAgICAgOiBQYXJz
ZXIodm0sIHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQotICAgICAgICAsIG1fbW9kZShtb2Rl
KQogICAgIHsKICAgICB9CiAKQEAgLTY2LDcgKzY2LDYgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRf
dCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtX21vZGUgeyBzdGQ6Om51bGxvcHQg
fTsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGI2NTQyNDkyNjQ4MTBhZmUwOWExNzA5OTUwNGY1
NjMwYmY4NjVjYzYuLjFlZDJiMmY4NTM2NTlmYTI3MmVkZGUwMTFhOThlYjYwYmM0OGViOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTQyLDcgKzQyLDYgQEAK
ICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFj
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTAsMzAgKzQ5
LDY1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi1QbGFuOjpQbGFuKFZNKiB2bSwgVmVjdG9yPHVp
bnQ4X3Q+IHNvdXJjZSkKLSAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXpl
KCkpCisKK1BsYW46OlBsYW4oVk0mIHZtLCBBcnJheUJ1ZmZlciYgc291cmNlLCBBc3luY1dvcmsg
d29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogUGxhbih2bSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlLmRhdGEoKSksIHNvdXJjZS5ieXRlTGVuZ3RoKCksIHdvcmss
IFdURk1vdmUodGFzaykpCit7Cit9CisKK1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhf
dD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6
IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCksIHdvcmssIFdURk1vdmUodGFz
aykpCiB7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNp
emVfdCBzb3VyY2VMZW5ndGgpCitQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCogc291
cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2sm
JiB0YXNrKQogICAgIDogbV92bSh2bSkKKyAgICAsIG1fY29tcGxldGlvblRhc2sodGFzaykKICAg
ICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkK
KyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCit7Cit9CisKK2NvbnN0IGNoYXIqIFBsYW46OnN0YXRl
U3RyaW5nKFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFN0
YXRlOjpJbml0aWFsOiByZXR1cm4gIkluaXRpYWwiOworICAgIGNhc2UgU3RhdGU6OlZhbGlkYXRl
ZDogcmV0dXJuICJWYWxpZGF0ZWQiOworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOiByZXR1cm4g
IlByZXBhcmVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21waWxlZDogcmV0dXJuICJDb21waWxlZCI7
CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxldGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGxhbjo6bW92ZVRv
U3RhdGUoU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID4gbV9zdGF0ZSk7CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIm1vdmluZyB0byBzdGF0ZTogIiwgc3RhdGVTdHJpbmcoc3Rh
dGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKG1fc3RhdGUpKTsKKyAgICBtX3N0YXRl
ID0gc3RhdGU7Cit9CisKK3ZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
ImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOworICAgIG1fZXJyb3JNZXNz
YWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGNvbXBsZXRlKGxvY2tlcik7CiB9CiAK
LWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+IHJlY29tcGlsZU1vZGUpCitib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQog
eworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygp
KQogICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAg
ICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VM
ZW5ndGgsIHJlY29tcGlsZU1vZGUpOworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2Vy
KCZtX3ZtLCBtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBhdXRvIHBhcnNlUmVz
dWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsK
LSAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gcGFyc2VSZXN1bHQuZXJyb3IoKTsKKyAgICAg
ICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigp
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9tb2R1
bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7CkBAIC04Miw1MiAr
MTE2LDQ4IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5LnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQgZW5k
aW5nIGF0OiAiLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQp
OworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFy
dGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3Rh
cnQsICIgYW5kIGVuZGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rp
b25JbmRleF0uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1f
c291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7
CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3Vy
Y2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25h
dHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1
bmN0aW9uKG1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICpt
X21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWdu
YXR1cmVJbmRpY2VzKTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVG
dW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
Km1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNp
Z25hdHVyZUluZGljZXMpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSksICIs
ICIpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3Io
KSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRl
eCkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICBmYWlsKGhv
bGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAv
LyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRD
b21waWxlVGltZXMoKSkKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1l
Ojpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9k
dWxlIik7CisgICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNvbXBs
ZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgIGVsc2UKKyAgICAgICAgbW92ZVRvU3RhdGUoU3Rh
dGU6OlZhbGlkYXRlZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFdlIGFyZSBjcmVhdGlu
ZyBhIGJ1bmNoIG9mIHRocmVhZHMgdGhhdCB0b3VjaCB0aGUgbWFpbiB0aHJlYWQncyBzdGFjay4g
VGhpcyB3aWxsIG1ha2UgQVNBTiB1bmhhcHB5LgotLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9LIGlz
IHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGludWUg
dW50aWwgYWxsIHRocmVhZHMKLS8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBkb25l
IGV4ZWN1dGluZy4KLVNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnByZXBhcmUoKQogewotICAg
IGlmICghcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShyZWNvbXBpbGVNb2RlKSkKLSAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAgVHJhY2VTY29w
ZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBXZWJBc3NlbWJseUNvbXBpbGVF
bmQpOwogCi0gICAgaWYgKHJlY29tcGlsZU1vZGUpCi0gICAgICAgIEFTU0VSVChtX21vZHVsZUlu
Zm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpID09IHJlY29tcGlsZU1vZGUpOwotCiAgICAgYXV0byB0
cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNv
bnN0IGNoYXIqIHdoYXQpIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNpemUpKSkgewogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwog
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91
Z2ggc3BhY2UgZm9yICIpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6ZSk7
CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgZmFpbChob2xkTG9jayht
X2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDEzMSArMTc4LDE1MyBAQCB2
b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiAg
ICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0g
bV93YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBvcnRG
dW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0LT5maWVsZCk7
CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlv
biBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgaW1wb3J0LT5tb2R1bGUsICI6
ICIsIGltcG9ydC0+ZmllbGQpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5h
dChpbXBvcnQtPmtpbmRJbmRleCk7Ci0gICAgICAgIG1fd2FzbUV4aXRTdHVicy51bmNoZWNrZWRB
cHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IobV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJ
bmRleCwgaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBtX3dhc21FeGl0U3R1YnMudW5j
aGVja2VkQXBwZW5kKGV4aXRTdHViR2VuZXJhdG9yKCZtX3ZtLCBtX2NhbGxMaW5rSW5mb3MsIHNp
Z25hdHVyZUluZGV4LCBpbXBvcnRGdW5jdGlvbkluZGV4KSk7CiAgICAgfQogCi0gICAgbV9jdXJy
ZW50SW5kZXggPSAwOworICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7Cit9CiAKLSAg
ICBhdXRvIGRvV29yayA9IFt0aGlzXSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAo
bV9jdXJyZW50SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9
IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7Ci0gICAg
ICAgICAgICB9CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBob3JlIGNsYXNzLi4uIGFuZCB0aGlz
IGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xhc3MgUGxhbjo6VGhyZWFkQ291bnRI
b2xkZXIgeworcHVibGljOgorICAgIFRocmVhZENvdW50SG9sZGVyKFBsYW4mIHBsYW4pCisgICAg
ICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bs
YW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7Cisg
ICAgfQogCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3Vy
Y2UgKyBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAg
ICAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1f
c291cmNlTGVuZ3RoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUo
KSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAg
ICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24obV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0
dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKLQotICAgICAgICAgICAgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPigpOwotICAgICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGUoKm1fdm0sIG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbklu
ZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1f
bW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwotCi0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBj
b21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2Ug
dGhlIGZpcnN0LgotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJp
bmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFu
IEV4cGVjdGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJ
bmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICB+VGhyZWFkQ291
bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9j
ayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwogCi0gICAgICAg
ICAgICAgICAgLy8gV2Ugd2lsbCB0ZXJtaW5hdGUgb24gdGhlIG5leHQgZXhlY3V0aW9uLgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX3Bs
YW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICBtX3BsYW4uY29tcGxldGUo
bG9ja2VyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKLSAgICAgICAg
fQotICAgIH07CisgICAgUGxhbiYgbV9wbGFuOworfTsKIAotICAgIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygp
KQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK3ZvaWQgUGxhbjo6
Y29tcGlsZUZ1bmN0aW9ucygpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBh
cmVkKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsK
IAotICAgIHVpbnQzMl90IHRocmVhZENvdW50ID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgp
ID8gV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgOiAxOwotICAgIHVpbnQzMl90IG51bVdv
cmtlclRocmVhZHMgPSB0aHJlYWRDb3VudCAtIDE7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7Ci0gICAgdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVtV29ya2VyVGhyZWFk
cyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bVdvcmtlclRocmVhZHM7IGkrKykK
LSAgICAgICAgdGhyZWFkcy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlVGhyZWFkKCJqc2Mud2FzbS1i
My1jb21waWxhdGlvbi50aHJlYWQiLCBkb1dvcmspKTsKKyAgICBpZiAobV9zdGF0ZSA+PSBTdGF0
ZTo6Q29tcGlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBUaHJlYWRDb3VudEhvbGRlciBob2xk
ZXIoKnRoaXMpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXg7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgKyttX2N1cnJlbnRJ
bmRleDsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCkpCisgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNv
bXBpbGVkKTsKKyAgICAgICAgfQogCi0gICAgZG9Xb3JrKCk7IC8vIExldCB0aGUgbWFpbiB0aHJl
YWQgZG8gc29tZSB3b3JrIHRvby4KKyAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0u
c3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0g
bV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIEFTU0VSVCh2YWxp
ZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9Vbmlx
dWVkU2lnbmF0dXJlSW5kaWNlcykpOworCisgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKKyAg
ICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV92bSwg
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9V
bmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgbV9tb2RlKTsKKworICAgICAgICBpZiAoVU5MSUtFTFko
IXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAg
ICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5
LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZhaWwo
bG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBm
dW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBG
SVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bVdvcmtlclRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkc1tpXSk7CisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5k
ZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICB9Cit9CiAKLSAgICBm
b3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAgewot
ICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNv
bnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNj
cmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgp
LT50b1N0cmluZygpOwordm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYp
Cit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudElu
ZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBm
dW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKm1fdm0sICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
KTsKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQorICAgICAgICAgICAgICAgIENvbXBpbGF0
aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOworICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmco
KTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAg
ICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53
YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFr
ZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2Vi
QXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3Jp
cHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cykpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgKmNvbnRl
eHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25Q
dHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpj
b250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBG
dW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAg
ICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNU
b1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21w
aWxhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBp
bGF0aW9uPihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1i
bHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlv
bi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0
cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKSB7Ci0g
ICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRp
bWUpLm1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgIiB1cyB0byBjb21waWxlIGFuZCBsaW5r
IHRoZSBtb2R1bGUiKTsKLSAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFBhdGNoIHRoZSBjYWxs
IHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGZvciAoYXV0byYgdW5s
aW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsK
LSAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3Rl
YWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSBy
ZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBj
YWxsLnRhcmdldCA9PSBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOjpUYXJnZXQ6OlRvSnMKKyAgICAg
ICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAgICAg
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5m
b3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5m
dW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNv
dWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNo
cG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNT
RVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAg
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbC50YXJnZXQgPT0gVW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzCiAgICAgICAgICAgICAgICAgICAgID8gbV93
YXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkud2FzbVRvSnMuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkKICAgICAgICAgICAgICAgICAgICAgOiBtX3dhc21FeGl0U3R1YnMuYXQo
Y2FsbC5mdW5jdGlvbkluZGV4KS53YXNtVG9XYXNtLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJn
ZXQgIT0gVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDo6VGFyZ2V0OjpUb0pzKTsKLSAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwu
ZnVuY3Rpb25JbmRleCAtIG1fd2FzbUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0ICE9IFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw6OlRhcmdldDo6VG9Kcyk7CisgICAgICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4IC0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgbV9mYWlsZWQgPSBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29t
cGxldGVkKSB7CisgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAgICAg
ICBtX2NvbXBsZXRpb25UYXNrKCp0aGlzKTsKKyAgICAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxs
KCk7CisgICAgfQogfQogCi12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2FsbGJhY2spCit2b2lkIFBsYW46
OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRl
eCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXgpIHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLQotICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2Fs
bGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2Fz
bUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1
bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsK
LQotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVu
Y3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUg
IT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUg
YSB3YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHRv
IGNvbXBsZXRlIC8gZmFpbC4KKyAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xvY2spOworICAg
IH0KK30KIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlw
b2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwordm9pZCBQbGFuOjpjYW5jZWwoKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3Rh
dGU6OkNvbXBsZXRlZCkgeworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNz
YWdlIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgfQogfQog
CisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAzNTQ0ZmQ0OGRjOGQ5MDkzZWY2YmE4
MTg0ZTQ1YzRmZTAwNzY2MmY0Li45ZGIxNGVhNjk1OWE1NzYyYThjMzljODNmMjdkYmY4OTVjMjM0
YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNjEgKzQwLDk2IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7
CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgUGxhbiB7CitjbGFzcyBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQ
bGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQgZG9udEZp
bmFsaXplKFBsYW4mKSB7IH0KKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChQbGFuJik+
IENvbXBsZXRpb25UYXNrOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21w
aWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgorICAgIFBsYW4oVk0mLCBBcnJheUJ1ZmZlciYsIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rv
cjx1aW50OF90PiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29t
cGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIGJv
b2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0gc3Rk
OjpudWxsb3B0KTsKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6
Om51bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAgIHZv
aWQgY29tcGlsZUZ1bmN0aW9ucygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0
aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOwotCi0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7
IH0KLSAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2Fn
ZTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluaXRp
YWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBv
cnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAg
cmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCiAgICAgc2l6ZV90
IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
c2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7
CisgICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAgICAg
fQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJ
bmZvcm1hdGlvbigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CiAgICAgICAg
IHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIH0KIAogICAgIEJhZzxD
YWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQogICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYm
ICFoYXNXb3JrKCkpOwogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwog
ICAgIH0KIAogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiYmIHRha2VXYXNtRXhpdFN0dWJzKCkK
ICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJuIFdURk1v
dmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25z
dCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAgdm9p
ZCBzZXRNb2RlQW5kUHJvbWlzZShNZW1vcnlNb2RlIG1vZGUsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlKQorICAgIHsKKyAgICAgICAgbV9tb2RlID0gbW9kZTsKKyAgICAgICAgbV9wZW5kaW5n
UHJvbWlzZSA9IHByb21pc2U7CisgICAgfQorICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQorICAgIEpTUHJvbWlzZURlZmVycmVkKiBwZW5kaW5nUHJvbWlzZSgp
IHsgcmV0dXJuIG1fcGVuZGluZ1Byb21pc2U7IH0KKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVy
biBtX3ZtOyB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7CisgICAgICAgIElu
aXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQsCisgICAgICAgIENv
bXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21w
bGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKworICAgIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKwor
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFlcnJv
ck1lc3NhZ2UoKS5pc051bGwoKTsgfQorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9CisKKyAgICB2b2lk
IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToKKyAg
ICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRI
b2xkZXI7CisKKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CisKKyAg
ICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAgICB2b2lkIGZhaWwoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworCisgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+
IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
bV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKQEAgLTEw
MywxNiArMTM4LDI0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNt
SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxD
b21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAotICAgIFZNKiBtX3Zt
OworICAgIFZNJiBtX3ZtOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBtX3BlbmRpbmdQcm9taXNl
IHsgbnVsbHB0ciB9OworICAgIENvbXBsZXRpb25UYXNrIG1fY29tcGxldGlvblRhc2s7CisKICAg
ICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVf
dCBtX3NvdXJjZUxlbmd0aDsKLSAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmlu
ZyBtX2Vycm9yTWVzc2FnZTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleDsKKyAgICBNZW1v
cnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBt
X2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOworICAgIFN0YXRlIG1fc3RhdGUgeyBT
dGF0ZTo6SW5pdGlhbCB9OworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAgICB1
aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1fY3Vy
cmVudEluZGV4IHsgMCB9OwogfTsKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODIwYzEyMjk3NDIwYTFkYzYzMmVhOTIz
NTYyYzM2MGNkY2NmNGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1
ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAgICAg
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1Rv
V2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxs
ZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKworICAgICAgICBjYWxsYmFj
ayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuY3BwCmluZGV4IDc1ZDM4MjZjYWQyMWIzODk2ZTQxZWViZGMzNzRmY2FlNjU0
NjEyMTQuLjkyMzg1OTRiYTk3ZjUzZjkyYWE1ZGMyMDg0OTU1NmFkYjg0ZmFmODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMjcxLDcgKzI3MSw3
IEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENvbnRyb2xUeXBlJiB0YXJnZXQs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByCiAgICAgICAgIGlmICh0YXJnZXQuc2lnbmF0dXJl
KCkgPT0gVm9pZCkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiYnJhbmNoIHRvIGJsb2Nr
IG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihleHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCB0YXJnZXQudHlwZSgpID09IEJsb2NrVHlw
ZTo6VG9wTGV2ZWwgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJsb2Nr
IiwgIiBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrLCBidXQgZXhwZWN0ZWQgIiwgdGFyZ2V0LnNp
Z25hdHVyZSgpKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YXJnZXQuc2lnbmF0
dXJlKCkgIT0gZXhwcmVzc2lvblN0YWNrLmxhc3QoKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgZG9l
c24ndCBtYXRjaCBibG9jaydzIHR5cGUiKTsKIAogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRlZDYw
MDkxNzU3YTBiZjA0NWIzYTNlZjFiOTYyM2M4MjE3NTdmNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTAsMCArMSwyNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworI2luY2x1ZGUgPHd0Zi9OdW1iZXJP
ZkNvcmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgY2hhciogV29ya2xpc3Q6OnByaW9y
aXR5U3RyaW5nKFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsK
KyAgICBjYXNlIFByaW9yaXR5OjpQcmVwYXJhdGlvbjogcmV0dXJuICJQcmVwYXJhdGlvbiI7Cisg
ICAgY2FzZSBQcmlvcml0eTo6U2h1dGRvd246IHJldHVybiAiU2h1dGRvd24iOworICAgIGNhc2Ug
UHJpb3JpdHk6OkNvbXBpbGF0aW9uOiByZXR1cm4gIkNvbXBpbGF0aW9uIjsKKyAgICBjYXNlIFBy
aW9yaXR5OjpTeW5jaHJvbm91czogcmV0dXJuICJTeW5jaHJvbm91cyI7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIFdvcmtsaXN0OjpUaHJlYWQg
ZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
ID0gQXV0b21hdGljVGhyZWFkOworICAgIFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCBXb3JrbGlzdCYgd29yaykKKyAgICAgICAgOiBCYXNlKGxvY2tlciwgd29yay5tX2xvY2ss
IHdvcmsubV9wbGFuRW5xdWV1ZWQpCisgICAgICAgICwgd29ya2xpc3Qod29yaykKKyAgICB7CisK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9u
UGxhbihjb25zdCBBYnN0cmFjdExvY2tlciYpCisgICAgeworICAgICAgICBhdXRvJiBxdWV1ZSA9
IHdvcmtsaXN0Lm1fcXVldWU7CisKKyAgICAgICAgaWYgKHF1ZXVlLmVtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVudC5w
bGFuKQorICAgICAgICAgICAgcXVldWUucG9wKCk7CisgICAgfQorCisgICAgUG9sbFJlc3VsdCBw
b2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CisgICAgICAgIHN5bmNocm9uaXplLm5v
dGlmeUFsbCgpOworCisgICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgeworCisgICAgICAg
ICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICAg
ICAgaWYgKHByaW9yaXR5ID09IFdvcmtsaXN0OjpQcmlvcml0eTo6U2h1dGRvd24pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisKKyAgICAgICAgICAgIGVsZW1lbnQg
PSBxdWV1ZS50b3AoKTsKKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFs
aWRhdGUvcHJlcGFyZS4KKyAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVl
blByZXBhcmVkKCkpCisgICAgICAgICAgICAgICAgcXVldWUucG9wKCk7CisKKyAgICAgICAgICAg
IGlmIChlbGVtZW50LnBsYW4tPmhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9s
bFJlc3VsdDo6V29yazsKKworICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIg
dGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJl
IGFyZSBvdGhlciBwbGFucy4KKyAgICAgICAgICAgIGF0dGVtcHRUb1JlbW92ZUNvbXBpbGF0aW9u
UGxhbihsb2NrZXIpOworICAgICAgICAgICAgZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0KKworICAgIFdv
cmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGNvbXBsZXRlID0g
WyZdICgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgfTsKKworICAgICAgICBQ
bGFuKiBwbGFuID0gZWxlbWVudC5wbGFuLmdldCgpOworICAgICAgICBBU1NFUlQocGxhbik7Cisg
ICAgICAgIGlmICghcGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAgICAgIHBsYW4t
PnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghcGxhbi0+aGFzV29y
aygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBwbGFuLT5wcmVwYXJlKCk7CisKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCp3b3JrbGlzdC5tX2xvY2spOworICAgICAgICAgICAgZWxlbWVudC5uZXh0UHJpb3JpdHko
KTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVtZW50KTsKKyAgICAgICAg
ICAgIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBhdCBzb21lIG9jY2Fz
aW9uYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5IGUuZy4gc3lu
Y2hyb25vdXMsIHBsYW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCisgICAgICAgIHBsYW4tPmNvbXBp
bGVGdW5jdGlvbnMoKTsKKyAgICAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOworICAgICAg
ICBhdHRlbXB0VG9SZW1vdmVDb21waWxhdGlvblBsYW4oaG9sZExvY2soKndvcmtsaXN0Lm1fbG9j
aykpOworICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBD
b25kaXRpb24gc3luY2hyb25pemU7CisgICAgV29ya2xpc3QmIHdvcmtsaXN0OworICAgIC8vIFdl
IGNhbiBvbmx5IG1vZGlmeSBlbGVtZW50IHdoZW4gaG9sZGluZyB0aGUgbG9jay4gQSBzeW5jaHJv
bm91cyBjb21waWxlIG1pZ2h0IGxvb2sgYXQgZWFjaCB0aHJlYWQncyB0YXNrcyBpbiBvcmRlciB0
byBib29zdCB0aGUgcHJpb3JpdHkuCisgICAgUXVldWVFbGVtZW50IGVsZW1lbnQ7Cit9OworCit2
b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6Om5leHRQcmlvcml0eSgpCit7CisgICAgc3dpdGNo
IChwcmlvcml0eSkgeworICAgIGNhc2UgUHJpb3JpdHk6OlByZXBhcmF0aW9uOgorICAgICAgICBw
cmlvcml0eSA9IFByaW9yaXR5OjpDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgUHJpb3JpdHk6OlN5bmNocm9ub3VzOgorICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK2VudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFrLCBEcm9wQW5k
Q29udGludWUsIENvbnRpbnVlIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lk
IFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYg
ZnVuYykKK3sKKyAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4gaXRl
cmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMgZnVu
Y3Rpb24KKyAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBxdWV1
ZSBzaG91bGQgYmUgc21hbGwuCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIG91ciBvd24g
UHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1CisgICAgc3RkOjp2ZWN0b3I8UXVldWVFbGVt
ZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgeworICAgICAgICBR
dWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7CisgICAgICAgIG1fcXVldWUucG9w
KCk7CisgICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50KTsKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykgeworICAgICAg
ICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVl
KQorICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOworICAgICAgICBjb250
aW51ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykKKyAg
ICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOworfQorCit2b2lkIFdvcmtsaXN0OjplbnF1ZXVl
KFJlZjxQbGFuPiBwbGFuKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworCisg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAo
UXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVsZW1l
bnQsIGVsZW1lbnQucGxhbi5nZXQoKSAhPSAmcGxhbi5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm4gSXRlcmF0ZVJlc3VsdDo6Q29udGludWU7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgYSBwcm9taXNlIGl0IG11c3QgYmUgc3luY2hyb25vdXMgc28gd2Ug
c2hvdWxkIGJvb3N0IHRoZSBwcmlvcml0eS4KKyAgICBQcmlvcml0eSBwcmlvcml0eSA9IHBsYW4t
PnBlbmRpbmdQcm9taXNlKCkgPyBQcmlvcml0eTo6UHJlcGFyYXRpb24gOiBQcmlvcml0eTo6U3lu
Y2hyb25vdXM7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkVucXVldWluZyBwbGFuIHdpdGgg
cHJpb3JpdHk6ICIsIHByaW9yaXR5U3RyaW5nKHByaW9yaXR5KSk7CisgICAgbV9xdWV1ZS5wdXNo
KHsgcHJpb3JpdHksIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7CisgICAgbV9wbGFu
RW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOworfQorCit2b2lkIFdvcmtsaXN0Ojpjb21wbGV0
ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCit7CisgICAgeworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVF
bGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5wbGFuID09ICZwbGFu
KSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJv
bm91czsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6VXBkYXRlQW5kQnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6Q29u
dGludWU7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJl
YWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50LnBsYW4gPT0gJnBsYW4pCisg
ICAgICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnByaW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNo
cm9ub3VzOworICAgICAgICB9CisgICAgfQorCisgICAgcGxhbi53YWl0Rm9yQ29tcGxldGlvbigp
OworfQorCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVl
dWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGlmICgmZWxlbWVudC5wbGFuLT52bSgpID09
ICZ2bSkgeworICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgZm9yIChh
dXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5w
bGFuICYmICZ0aHJlYWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKKyAgICAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRo
ZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBo
b2xkIHRoZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgdGhyZWFkLT5lbGVtZW50LnBsYW4t
PmNhbmNlbCgpOworICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KCptX2xvY2sp
OworICAgICAgICB9CisgICAgfQorfQorCitXb3JrbGlzdDo6V29ya2xpc3QoKQorICAgIDogbV9s
b2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNU
aHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcGls
YXRpb25UaHJlYWRzID0gT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID8gV1RGOjpudW1iZXJP
ZlByb2Nlc3NvckNvcmVzKCkgOiAxOworICAgIG1fdGhyZWFkcy5yZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZDb21waWxhdGlvblRocmVhZHMpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2sp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFk
czsgaSsrKQorICAgICAgICBtX3RocmVhZHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8V29ya2xpc3Q6OlRocmVhZD4obG9ja2VyLCAqdGhpcykpOworfQorCitXb3JrbGlzdDo6fldv
cmtsaXN0KCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwor
ICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwg
bnVsbHB0ciB9KTsKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwor
ICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytp
KQorICAgICAgICBtX3RocmVhZHNbaV0tPmpvaW4oKTsKK30KKworc3RhdGljIFdvcmtsaXN0KiBn
bG9iYWxXb3JrbGlzdDsKKworV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RPck51bGwoKSB7IHJl
dHVybiBnbG9iYWxXb3JrbGlzdDsgfQorV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCkKK3sKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdvcmtsaXN0OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVXb3JrbGlzdCwgW10geworICAgICAgICBnbG9iYWxXb3JrbGlzdCA9
IG5ldyBXb3JrbGlzdCgpOworICAgIH0pOworICAgIHJldHVybiAqZ2xvYmFsV29ya2xpc3Q7Cit9
CisKKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdv
cmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zOWMwNzM1YmMyYTE2ZmMyMzZmODE1NzBmMjhlODU5YTVjY2NlNDUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
IlZNLmgiCisKKyNpbmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU1Byb21pc2VEZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQbGFuOwor
CitjbGFzcyBXb3JrbGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgV29ya2xpc3QoKTsKKyAgICB+V29ya2xpc3QoKTsKKworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZW5xdWV1ZShSZWY8UGxhbj4pOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yVk0o
Vk0mKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25v
dXNseShQbGFuJik7CisKKyAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCos
IFBsYW4qKTsKKyAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4q
KTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFRocmVh
ZDsKKworICAgIHR5cGVkZWYgdWludDY0X3QgVGlja2V0OworICAgIFRpY2tldCBuZXh0VGlja2V0
KCkgeyByZXR1cm4gbV9sYXN0R3JhbnRlZFRpY2tldCsrOyB9CisKKyAgICBlbnVtIGNsYXNzIFBy
aW9yaXR5IHsKKyAgICAgICAgU2h1dGRvd24sCisgICAgICAgIFN5bmNocm9ub3VzLAorICAgICAg
ICBDb21waWxhdGlvbiwKKyAgICAgICAgUHJlcGFyYXRpb24KKyAgICB9OworICAgIGNvbnN0IGNo
YXIqIHByaW9yaXR5U3RyaW5nKFByaW9yaXR5KTsKKworICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQg
eworICAgICAgICBQcmlvcml0eSBwcmlvcml0eTsKKyAgICAgICAgVGlja2V0IHRpY2tldDsKKyAg
ICAgICAgUmVmUHRyPFBsYW4+IHBsYW47CisKKyAgICAgICAgdm9pZCBuZXh0UHJpb3JpdHkoKTsK
KyAgICB9OworCisgICAgc3RydWN0IENvbXBhcmF0b3IgeworICAgICAgICBib29sIG9wZXJhdG9y
KCkoY29uc3QgUXVldWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1ZUVsZW1lbnQmIHJpZ2h0KSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5w
cmlvcml0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC50aWNrZXQgPiByaWdodC50aWNr
ZXQ7CisgICAgICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBpdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOworCisg
ICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
PiBtX3BsYW5FbnF1ZXVlZDsKKyAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxv
dyBidXQgdGhhdCdzIHVubGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBp
bGUgdGhpbmdzIG9mIHRoZSBzYW1lCisgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVy
LCB3aGljaCBpc24ndCB3cm9uZywganVzdCBzdWJvcHRpbWFsLgorICAgIFRpY2tldCBtX2xhc3RH
cmFudGVkVGlja2V0IHsgMCB9OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpW
ZWN0b3IgYnV0IFdURjo6VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVy
YXRvci4KKyAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8
UXVldWVFbGVtZW50PiwgQ29tcGFyYXRvcj4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPEpTUHJvbWlz
ZURlZmVycmVkKiwgUGxhbio+IG1fYWN0aXZlUGxhbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxUaHJlYWQ+PiBtX3RocmVhZHM7Cit9OworCitXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlz
dE9yTnVsbCgpOworSlNfRVhQT1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0KCk7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgKaW5kZXggYjg3NzdkYTBkNGQ3YTEzMGY0MjI0ZWQ0NWZjY2MyZDE5YzFmMjdj
Ni4uYThhM2RjYTNkMDlmNWRkMzlkYTZiOWE4Zjk5NWRjODUwODk4N2FjNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaApAQCAt
NjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlw
b2ludCYmKTsKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwogCiAgICAgV2FzbTo6
RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmZjg3MTE2
ODE5YTMyMjQzOWU4MWNiZDA0NjQ3MmEyNmYyMTgzZDhiLi5lYjk2MDczYjY5OThiMDJhMjA3NGFi
MTVkZjc3NDY3NjJkNmZiNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMjksMzEgKzI5LDY3IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldh
c21QbGFuSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwg
bnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9
OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExp
bmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2Fz
bTo6TWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBvd25lciwgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxh
biwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNh
bGxMaW5rSW5mb3MpKQotICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVi
cykpCisgICAgLCBtX3BsYW4oV1RGTW92ZShwbGFuKSkKICAgICAsIG1fbW9kZShtb2RlKQogICAg
ICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKICAgICBtX21vZHVsZS5zZXQodm0sIHRo
aXMsIG93bmVyKTsKKyAgICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxvY2sobW9kZSkpOworICAg
IG1vZHVsZSgpLT5tX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZt
LCB0aGlzLCB0aGlzKTsKKwogICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOwogfQogCit2
b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpbml0
aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWTSYgdm0gPSBwbGFuKCkudm0oKTsK
KyAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIXBsYW4oKS5oYXNXb3JrKCkpOworCisgICAgaWYgKHBsYW4oKS5mYWlsZWQo
KSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IHBsYW4oKS5lcnJvck1lc3NhZ2UoKTsKKyAg
ICAgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUKHBsYW4oKS5tb2RlKCkgPT0gbW9kZSgpKTsKKyAgICBBU1NFUlQocGxhbigp
LmludGVybmFsRnVuY3Rpb25Db3VudCgpID09IG1fY2FsbGVlQ291bnQpOworCisgICAgbV9jYWxs
TGlua0luZm9zID0gcGxhbigpLnRha2VDYWxsTGlua0luZm9zKCk7CisgICAgbV93YXNtRXhpdFN0
dWJzID0gcGxhbigpLnRha2VXYXNtRXhpdFN0dWJzKCk7CisKKyAgICBwbGFuKCkuaW5pdGlhbGl6
ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSkgeworICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBq
c0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwg
Y2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICB9KTsKKworICAgIG1fcGxh
biA9IG51bGxwdHI7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+
KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygp
OwogfQogCi1ib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIG1lbW9yeSkKK2Jvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZl
VG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAogeworICAgIGlmICghcnVu
bmFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2FzbTo6TWVtb3J5TW9kZSBj
b2RlTW9kZSA9IG1vZGUoKTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUgPSBtZW1v
cnktPm1lbW9yeSgpLm1vZGUoKTsKICAgICBzd2l0Y2ggKGNvZGVNb2RlKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgK
aW5kZXggZmU4YzNmM2JhMjBhNmZlNjgxNWViMTQ0MGE1N2ZiZGMyMjliZmQ5Yy4uMDhhYmRiYzAy
MWI4MThjMzk1NTk2MTY5YTFjZGEyNDVkZTk4ZTUxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNh
bGxlZS5oIgorI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRl
IDx3dGYvQmFnLmg+CkBAIC0zOSwxNCArNDAsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBK
U1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeTsKIAorbmFtZXNw
YWNlIFdhc20geworY2xhc3MgUGxhbjsKK30KKwogY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8
Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJz
PiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3Vu
dCkKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206
OlBsYW4+JiYgcGxhbiwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgewotICAgICAgICBhdXRv
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlua0luZm8+PihjYWxs
TGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPj4oZXhp
dFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBh
bGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBv
d25lciwgbW9kZSwgV1RGTW92ZShwbGFuKSwgY2FsbGVlQ291bnQpOwogICAgICAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC01
OSw3ICs2NCwxNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KICAgICBXYXNtOjpNZW1v
cnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotICAgIGJv
b2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSopOworCisgICAgLy8gRG9uJ3QgY2Fs
bCBpbnRpYWxpemUgZGlyZWN0bHksIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmb3IgeW91LCBhcyBu
ZWVkZWQsIGJ5IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbi4KKyAgICB2
b2lkIGluaXRpYWxpemUoKTsKKyAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4g
IW1fcGxhbjsgfQorCisgICAgV2FzbTo6UGxhbiYgcGxhbigpIGNvbnN0IHsgQVNTRVJUKCFpbml0
aWFsaXplZCgpKTsgcmV0dXJuICptX3BsYW47IH0KKworICAgIGJvb2wgcnVubmFibGUoKSBjb25z
dCB7IHJldHVybiBpbml0aWFsaXplZCgpICYmICFtX2Vycm9yTWVzc2FnZTsgfQorICAgIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKCkgeyBBU1NFUlQoIXJ1bm5hYmxlKCkpOyByZXR1cm4gbV9lcnJvck1l
c3NhZ2U7IH0KKyAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25z
dDsKIAogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKQEAgLTg5
LDEwICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1f
Y2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKICAgICB9CiAKLSAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOwotICAgIH0KKyAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKSB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsgfQogCiAgICAgdm9pZCogd2FzbVRv
SnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB7CkBAIC0xMDEs
NyArMTEyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxsTGlua0luZm8+JiYs
IFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnlNb2RlLCB1bnNpZ25l
ZCBjYWxsZWVDb3VudCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqLCBXYXNtOjpNZW1vcnlNb2RlLCBSZWY8V2FzbTo6UGxhbj4mJiwgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKQEAgLTEyNSw2ICsxMzYsOSBAQCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93
YXNtRXhpdFN0dWJzOworICAgIC8vIFRoZSBwbGFuIHRoYXQgaXMgY29tcGlsaW5nIHRoaXMgY29k
ZSBibG9jay4KKyAgICBSZWZQdHI8V2FzbTo6UGxhbj4gbV9wbGFuOworICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKICAgICBXYXNtOjpNZW1vcnlNb2RlIG1fbW9kZTsKICAgICB1bnNpZ25lZCBt
X2NhbGxlZUNvdW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmluZGV4IGYwMzMxMGVhNWUyMDYwNjU0MWQ1OGU3MjY0
YjE4NWU0M2Q2OTMzZDQuLjU3OGE2OWY0OTgxNWE4MjUyM2MxMTI5NDhmYmQ4ZWEwOTAzNWYyMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlI
ZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaApAQCAtNzMsNiArNzMsMjIgQEAgQUxXQVlTX0lOTElORSB1aW50OF90KiBnZXRX
YXNtQnVmZmVyRnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgc2kKICAg
ICByZXR1cm4gYXJyYXlCdWZmZXJWaWV3ID8gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVm
ZmVyVmlldy0+dmVjdG9yKCkpIDogc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5p
bXBsKCktPmRhdGEoKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgc2l6ZV90IGJ5dGVPZmZzZXQ7CisgICAgc2l6ZV90IGJ5dGVTaXplOworICAgIHVp
bnQ4X3QqIGRhdGEgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBieXRlT2Zm
c2V0LCBieXRlU2l6ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKKworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhICsg
Ynl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIHJldHVybiBi
dWZmZXI7CisKKyAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQUxXQVlTX0lO
TElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2Jq
ZWN0LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCiB7CiAgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHModm0sIFdlYkFzc2VtYmx5RnVuY3Rpb246OmluZm8oKSkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmlu
ZGV4IDFjMTFiMGNhNjVjOTE3NDJmOGU0ODEzYzI0ZDk3NWY2NWVlYmFhMTguLmFhMDQ5OGVmYzY2
Y2VjZDdkNDQxZWZiMTgzMzJiYzI2YmM2N2NlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMzIsMzEg
KzMyLDE2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52
aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtF
cnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGNyZWF0ZSBzdHViIG1lbW9yaWVzIGV2ZW4g
Zm9yIG1vZHVsZXMgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnZXQgYSBtZW1vcnkgc28gd2Ugd2Fu
dCB0byBhdm9pZCByZWNvbXBsaW5nIHRoZXJlLgotICAgIGlmIChtZW1vcnktPm1lbW9yeSgpKSB7
Ci0gICAgICAgIGF1dG8gY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPm1vZHVsZSgpLT5jb2RlQmxv
Y2sodm0sIGV4ZWMsIG1lbW9yeSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
KTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgIH0K
LSAgICBtX21lbW9yeS5zZXQodm0sIHRoaXMsIG1lbW9yeSk7Ci19Ci0KLUpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBUaGVzZSBv
YmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVy
ZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpKSkgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRp
b24oKS5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpKTsKLSAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1vZHVsZSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKLSAg
ICByZXR1cm4gaW5zdGFuY2U7Ci19Citjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9OwogCiBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CkBAIC03NSwxMSAr
NjAsMTEgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCisgICAgbV9tb2R1bGUu
c2V0KHZtLCB0aGlzLCBtb2R1bGUpOwogICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUg
PSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVn
aXN0ZXIpOwogICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRy
YU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0
cmFNZW1vcnlTaXplKTsKIAotICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgbW9kdWxlLT5j
b2RlQmxvY2soKSk7CiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBt
b2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJleHBvcnRzIiksIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgTm9uZSk7CiB9
CkBAIC05NSwxNiArODAsMjc4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxv
Y2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCku
Z2xvYmFscy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0
LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqdGhp
c09iamVjdC0+aW1wb3J0RnVuY3Rpb24oaSkpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtpXSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjphZGRVbml0aWFsaXplZENvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpQbGFuPiBw
bGFuKQoreworICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNy
ZWF0ZSh2bSwgbW9kdWxlKCksIG1lbW9yeU1vZGUoKSwgV1RGTW92ZShwbGFuKSwgbW9kdWxlKCkt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpOworICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+
aW5pdGlhbGl6ZWQoKSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6
ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQoreworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBjb2RlQmxvY2soKS0+aW5pdGlhbGl6ZSgpOwor
CisgICAgaWYgKCFjb2RlQmxvY2soKS0+cnVubmFibGUoKSkgeworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZt
LCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJs
b2NrKCktPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlQoY29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKG1lbW9yeSgpKSk7CisKKyAgICBh
dXRvKiBtb2R1bGVSZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21v
ZHVsZU5hbWVzcGFjZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOworICAgIG1vZHVsZVJlY29yZC0+
bGluayhleGVjLCBtb2R1bGUoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2
YWx1YXRlKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0
cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUpCit7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisKKyAg
ICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7CisgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfTsKKworICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5v
dCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9y
IGlzIHRocm93bi4KKyAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYg
IWltcG9ydE9iamVjdCkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1
c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUg
cmVxdWlyZXMgaW1wb3J0cyIpKSk7CisKKyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElkZW50
aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2Vi
QXNzZW1ibHlJbnN0YW5jZSIpKTsKKyAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxl
UmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1v
ZHVsZUluZm9ybWF0aW9uKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOworCisgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9
IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOworICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2
bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSk7CisgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OworCisgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1l
bXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1l
bW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHku
CisgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJu
YWwgdmFsdWVzLgorICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7CisgICAgdW5z
aWduZWQgbnVtSW1wb3J0R2xvYmFscyA9IDA7CisKKyAgICBib29sIGhhc01lbW9yeUltcG9ydCA9
IGZhbHNlOworICAgIGJvb2wgaGFzVGFibGVJbXBvcnQgPSBmYWxzZTsKKyAgICAvLyBGb3IgZWFj
aCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKKyAgICBmb3IgKGF1dG8mIGltcG9ydCA6IG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKKyAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhlIHJl
c3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxlX25h
bWUpLgorICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0LT5n
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGltcG9ydC5tb2R1bGUpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICAgICAg
Ly8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAg
ICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVz
dCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOworCisgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2
YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBpLml0ZW1fbmFtZSkKKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBpbXBvcnQuZmllbGQpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBudWxscHRyKTsKKworICAgICAgICBzd2l0Y2ggKGltcG9ydC5raW5kKSB7CisgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gNC4g
SWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoKKyAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFi
bGUodikgaXMgZmFsc2UsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAgICAgICAg
ICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
ImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxhYmxlIikpKTsKKworICAgICAgICAgICAgSlNP
YmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICAgICAg
Ly8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKKyAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKKyAgICAgICAgICAgIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOworICAgICAgICAg
ICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rp
b24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhl
IHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cg
YSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCisgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1
bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2Fz
bUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5j
dGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNs
b3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSB3
YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5jdGlvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0g
bW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5r
aW5kSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9
IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRl
ZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBpaWkuIE90aGVyd2lzZToKKyAgICAgICAgICAgIC8vIGEuIExldCBjbG9z
dXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3aGljaCBj
YWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2NyaXB0IGFy
Z3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFueSwgYnkg
Y29lcmNpbmcgdmlhIFRvV2ViQXNzZW1ibHlWYWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGU6IGRv
bmUgYXMgcGFydCBvZiBQbGFuIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgLy8gaXYuIEFwcGVu
ZCB2IHRvIGZ1bmNzLgorICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8g
dGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUg
KHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93
ICh0aGUgSlNGdW5jdGlvbikuCisKKyAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlv
bnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7CisgICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVu
Y3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9u
KTsKKyAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNUYWJsZUltcG9ydCk7IC8v
IFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAg
ICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAg
ICAgaGFzVGFibGVJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxl
KiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsK
KyAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0
LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KKyAgICAgICAgICAgIGlmICghdGFibGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOworCisgICAgICAgICAgICB1aW50MzJfdCBl
eHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRp
YWwoKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgp
OworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlh
bCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOworCisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gZXhwZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBhY3R1YWxNYXhpbXVtID0gdGFibGUtPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWFjdHVhbE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJs
ZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJl
cyB0aGF0IGl0IGRvZXMiKSkpOworICAgICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+
ICpleHBlY3RlZE1heGltdW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBv
cnRlZCBUYWJsZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0
ZWQgJ21heGltdW0nIikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWkuIEFw
cGVuZCB2IHRvIHRhYmxlcy4KKyAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1d
IHRvIGltcG9ydHMuCisgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3Rh
bmNlLCB0YWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKKyAgICAgICAgICAgIC8vIDYuIElmIGkg
aXMgYSBtZW1vcnkgaW1wb3J0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9y
eUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZh
aWx1cmUuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1v
cnkpOworICAgICAgICAgICAgaGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1l
bW9yeSo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFz
c2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgorICAg
ICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9y
eSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7CisK
KyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBkZWNsYXJlZEluaXRpYWwgPSBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOworICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGlt
cG9ydGVkSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOworICAgICAgICAgICAg
aWYgKGltcG9ydGVkSW5pdGlhbCA8IGRlY2xhcmVkSW5pdGlhbCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyBz
bWFsbGVyIHRoYW4gdGhlIG1vZHVsZSdzIGRlY2xhcmVkICdpbml0aWFsJyBpbXBvcnQgbWVtb3J5
IHNpemUiKSkpOworCisgICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGRlY2xhcmVkTWF4
aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAg
ICAgICBXYXNtOjpQYWdlQ291bnQgaW1wb3J0ZWRNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5t
YXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpbXBvcnRlZE1heGltdW0pCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdt
YXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOworCisgICAg
ICAgICAgICAgICAgaWYgKGltcG9ydGVkTWF4aW11bSA+IGRlY2xhcmVkTWF4aW11bSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYSAnbWF4
aW11bScgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZGVjbGFyZWQgJ21heGltdW0n
IGltcG9ydCBtZW1vcnkgc2l6ZSIpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KKyAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYu
W1tNZW1vcnldXSB0byBpbXBvcnRzLgorICAgICAgICAgICAgQVNTRVJUKCFpbnN0YW5jZS0+bV9t
ZW1vcnkpOworICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2Us
IG1lbW9yeSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGds
b2JhbCBpbXBvcnQ6CisgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBpbW11dGFibGUg
Z2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgIEFTU0VSVChtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xv
YmFsOjpJbW11dGFibGUpOworICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9iYWxfdHlwZSBv
ZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2ViQXNzZW1ibHku
TGlua0Vycm9yLgorICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1w
b3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoImltcG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKTsKKyAgICAgICAgICAg
IGlmICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1w
b3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOworICAgICAgICAgICAgLy8gaWlpLiBB
cHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCisgICAgICAgICAgICBBU1NF
UlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKKyAgICAgICAgICAgIHN3
aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+
c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAg
ICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9j
YXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2
YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHsKKyAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmIG1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0
aGVyIGhhdmUgYSBNZW1vcnkgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNl
cHRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNNZW1vcnlJbXBvcnQpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVt
b3J5SW1wb3J0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5LmlzSW1wb3J0KCkpOworICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5
IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgorICAgICAgICAgICAgUmVmUHRyPFdhc206
Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkp
OworICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKworICAgICAgICAgICAgaW5zdGFu
Y2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgeworICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJs
ZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBv
cnQoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBoYXZlIGEgVGFibGUgaW1w
b3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkg
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24uaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3
aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgorICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKKyAgICAg
ICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwg
bW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJs
eVRhYmxlIHdlJ3ZlIGRlZmluZWQuCisgICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8g
YmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgor
ICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAg
IEFTU0VSVCh0YWJsZSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGlu
c3RhbmNlLCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFpbnN0YW5j
ZS0+bWVtb3J5KCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1v
cnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxs
cHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KKyAgICAgICAg
aW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9y
eVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqKG5ldyBXYXNtOjpNZW1vcnkoKSkpKSk7CisgICAgfQor
ICAgIAorICAgIC8vIEdsb2JhbHMKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9i
YWxzID09IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOworICAgICAgICBm
b3IgKHNpemVfdCBnbG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwg
bW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xv
YmFsSW5kZXhdOworICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUg
IT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRp
YWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1J
bXBvcnRHbG9iYWxzKTsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2Jh
bEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIp
OworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkp
OworICAgIGluc3RhbmNlLT5tX2NvZGVCbG9jay5zZXRNYXlCZU51bGwodm0sIGluc3RhbmNlLCBq
c01vZHVsZS0+Y29kZUJsb2NrKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpKTsKKworICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
c19pbmZvID0geyAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKaW5kZXggZTIyODQ5Njk2NzIwNWEzMTM2Yzg4M2JiZGUzMjZhZGJj
NzExMTMwZC4uZWM5YmM4ZTgxNDA3MmI3ZWUyNWU5MmI5YjQ5ZTEwODQ2YWJmZDVkZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKQEAgLTM4LDUxICszOCwzNCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIAorbmFtZXNwYWNl
IFdhc20geworY2xhc3MgUGxhbjsKK30KKworCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2Ug
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNE
ZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
Y3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBp
bXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lO
Rk87CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5t
b2R1bGUoKTsKLSAgICB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KKyAgICBib29sIGluaXRpYWxpemVk
KCkgY29uc3QgeyByZXR1cm4gY29kZUJsb2NrKCkgJiYgY29kZUJsb2NrKCktPmluaXRpYWxpemVk
KCk7IH0KKyAgICB2b2lkIGFkZFVuaXRpYWxpemVkQ29kZUJsb2NrKFZNJiwgUmVmPFdhc206OlBs
YW4+KTsKKyAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqKTsKIAotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQobV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7
Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kdWxlLmdldCgpOyB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRG
dW5jdGlvbih1bnNpZ25lZCBpZHgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpZHgg
PCBtX251bUltcG9ydEZ1bmN0aW9ucyk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0RnVuY3Rpb25z
KClbaWR4XTsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5j
dGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVu
Y3Rpb25zKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBK
U09iamVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKLSAgICB7Ci0gICAgICAgIGltcG9ydEZ1bmN0
aW9uKGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwotICAgIH0KKyAgICBKU09iamVjdCogaW1w
b3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1w
b3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygpW2lkeF0uZ2V0KCk7IH0KIAog
ICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgp
OyB9Ci0gICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBpbGUuCi0gICAg
dm9pZCBzZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7Cisg
ICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBB
U1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KICAgICBX
YXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCku
bW9kZSgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90
YWJsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFibGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlKSB7IG1fdGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7IH0KIAogICAgIGludDMy
X3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0
KClbaV07IH0KICAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC05MCwxMSArNzMsNiBAQCBwdWJsaWM6CiAg
ICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KICAgICB2b2lkIHNldEdsb2JhbCh1
bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQog
Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9m
KFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIGlkeDsKLSAgICB9Ci0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRh
YmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90
YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KQEAg
LTExMyw2ICs5MSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6CisgICAgV3JpdGVC
YXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVC
bG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3Nl
bWJseU1lbW9yeT4gbV9tZW1vcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGY0MTQ2N2Y0ZmFhZTlkYWEwODE2
NzRlN2YyMDU3OGQ0YzVlYjZmM2MuLmEyY2QzNDYxMmE2YjllNGIyYzlkMjExZWZkODQwOWEwNDY4
MDVkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwCkBAIC00MiwzNSArNDIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3Nl
bWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBX
YXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUpCitK
U1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVm
ZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikKIHsKKyAgICBBU1NFUlQo
IXBsYW4tPmhhc1dvcmsoKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBp
cyB0aHJvd24uCi0gICAgcGxhbi5ydW4obW9kZSk7Ci0gICAgaWYgKHBsYW4uZmFpbGVkKCkpIHsK
LSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlD
b21waWxlRXJyb3IoZXhlYywgdm0sIHBsYW4uZXJyb3JNZXNzYWdlKCkpKTsKKyAgICBpZiAocGxh
bi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgc3RydWN0dXJlLT5nbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JN
ZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChtb2Rl
KQotICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcGxhbi5tb2RlKCkpOwotCi0gICAgdW5zaWduZWQg
Y2FsbGVlQ291bnQgPSBwbGFuLmludGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAgIGF1dG8qIGNv
ZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgdGhpcywgcGxhbi50
YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0dWJzKCksIHBsYW4ubW9kZSgp
LCBjYWxsZWVDb3VudCk7Ci0KLSAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMtPmpzQ2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNl
dEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7
Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxs
ZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4g
Y29kZUJsb2NrOwotfQotCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSkKLXsKLSAgICBhdXRvKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXAp
KSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOwogCi0gICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjLCBzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICByZXR1cm4gaW5z
dGFuY2U7CisgICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNX
ZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVj
dHVyZSwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtLCBX
VEZNb3ZlKHBsYW4pKTsKKyAgICByZXR1cm4gbW9kdWxlOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzgsNjEgKzYxLDQwIEBAIFN0cnVj
dHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dl
YkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4mJiBzb3VyY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3Nv
dXJjZUJ1ZmZlcihzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkKIHsKIH0KIAotSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCi17Ci0gICAgV2FzbTo6TWVt
b3J5TW9kZSBtb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2RlczsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2NvZGVCbG9ja3NbaV0gJiYgbV9jb2RlQmxvY2tzW2ldLT5pc1NhZmVUb1J1bihtZW1v
cnkpKQotICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tpXS5nZXQoKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZv
ciB0aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCi0gICAgV2FzbTo6UGxhbiBwbGFu
KCZ2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3Nv
dXJjZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLQotICAgIGF1dG8qIGNvZGVCbG9jayA9IGJ1aWxk
Q29kZUJsb2NrKHZtLCBleGVjLCBwbGFuLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKLQotICAgIEFTU0VSVChwbGFuLmV4cG9ydHMoKS5zaXplKCkgPT0g
bV9leHBvcnRTeW1ib2xUYWJsZS0+c2l6ZSgpKTsKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
ewotICAgICAgICBmb3IgKGF1dG8mIGV4cCA6IHBsYW4uZXhwb3J0cygpKQotICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChleHAsIG1fZXhwb3J0U3ltYm9sVGFibGUtPmNvbnRhaW5zKGV4cC5maWVs
ZC5pbXBsKCkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxvY2stPm1vZGUo
KSk7Ci0gICAgY29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAg
ICByZXR1cm4gY29kZUJsb2NrOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3VyY2UsIHNpemVf
dCBieXRlU2l6ZSkKK3ZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCi0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFdhc206OlBsYW4gcGxhbigmdm0s
IHNvdXJjZSwgYnl0ZVNpemUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24o
KTsKKyAgICBmb3IgKGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7Cisg
ICAgICAgIEFTU0VSVChleHAuZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOwor
ICAgICAgICBleHAuZmllbGQgPSBBdG9taWNTdHJpbmcoZXhwLmZpZWxkKTsKKyAgICB9CisgICAg
Zm9yIChhdXRvJiBpbXAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cykgeworICAgICAgICBB
U1NFUlQoaW1wLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAg
aW1wLmZpZWxkID0gQXRvbWljU3RyaW5nKGltcC5maWVsZCk7CisgICAgICAgIEFTU0VSVChpbXAu
bW9kdWxlLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICAgICAgaW1wLm1vZHVs
ZSA9IEF0b21pY1N0cmluZyhpbXAubW9kdWxlKTsKKyAgICB9CiAKLSAgICBhdXRvKiBjb2RlQmxv
Y2sgPSBidWlsZENvZGVCbG9jayh2bSwgZXhlYywgcGxhbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwpOworICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZNb3ZlKG1vZHVsZUlu
Zm9ybWF0aW9uKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVk
IEFzdC5tb2R1bGUuCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gU3ltYm9s
VGFibGU6OmNyZWF0ZSh2bSk7Ci0gICAgZm9yIChhdXRvJiBleHAgOiBwbGFuLmV4cG9ydHMoKSkg
eworICAgIGZvciAoYXV0byYgZXhwIDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0cykgewog
ICAgICAgICBhdXRvIG9mZnNldCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zm
c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQo
Tm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZh
ck9mZnNldChvZmZzZXQpKSk7CisgICAgICAgIEFTU0VSVChleHAuZmllbGQuaW1wbCgpLT5pc0F0
b21pYygpKTsKKyAgICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3Nh
cnksIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihleHAuZmllbGQuaW1wbCgpKSwgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0KIAotICAgIG1fc291cmNl
QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsKLSAgICBtX21v
ZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBtX2V4
cG9ydFN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUpOwotICAgIGNv
ZGVCbG9ja0Zvcihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwog
fQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5o
CmluZGV4IDM4OWU2M2EzMzVjMWMxMTdiNjk3Njk3MTBjNjNiZDdmODM0ZTg2ZTQuLmE0MTc4ODRk
ZDUxMTkzY2JkMGE2YzYyY2Q2NjkxZDMxOGY0YWUwZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTQ4LDM1ICs0OCwz
MiBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpOworICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiAqbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IHRha2VS
ZXNlcnZlZE1lbW9yeSgpIHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS50YWtl
UmVzZXJ2ZWRNZW1vcnkoKTsgfQogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sg
dGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNl
LiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUluZm9ybWF0aW9u
LT5tZW1vcnkubW9kZSgpKS5nZXQoKTsgfQotICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRl
IGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSBy
ZWNvbXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhl
Y1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQorCisgICAgQXJyYXlCdWZmZXIm
IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQnVmZmVyLmdldCgpOyB9CiAKIHByaXZh
dGU6Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+JiBjb2RlQmxvY2tG
b3IoV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nh
c3Q8c2l6ZV90Pihtb2RlKV07IH0KLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBidWlsZENv
ZGVCbG9jayhWTSYsIEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdhc206
Ok1lbW9yeU1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIGZyaWVuZCBjbGFzcyBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVj
dHVyZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBieXRlU2l6ZSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYs
IFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0
aW9uOworICAgIFJlZjxBcnJheUJ1ZmZlcj4gbV9zb3VyY2VCdWZmZXI7CisgICAgc3RkOjp1bmlx
dWVfcHRyPGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9u
OwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206
Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CmluZGV4IDE2ZmM4ZDJiZWNkMzdiZGZkYzZiMDNkMDY1YTM2Yzg3OTc3ZTNiOTYuLjA0MWRkMzU4
NDg0NzRhNWU4Zjg5N2RlNzdjYjRiZDc1MmM5ZmIyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2Fz
bVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5oIgpAQCAtNDUsOCArNDcsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3Rh
dGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCiBjb25zdCBDbGFzc0luZm8gV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpz
X2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlJbnN0YW5jZSwgQ1JFQVRFX01FVEhP
RF9UQUJMRShXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IpIH07CiAKIC8qIFNvdXJjZSBm
b3IgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5oCkBAIC01NCwyNjkgKzU0LDUy
IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfCiAgQGVuZAogICovCiAKK3VzaW5nIFdhc206OlBs
YW47CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byYgdm0gPSBleGVj
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIElmIG1v
ZHVsZU9iamVjdCBpcyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVy
cm9yIGlzIHRocm93bi4KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFqc01vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2Vi
QXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9k
dWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBh
IFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBl
Rm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9i
amVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlz
IG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFy
Z3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9
IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNV
bmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBt
dXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBy
dW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3Rh
bmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5k
ZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOwogICAgIAogICAgIFN0
cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLQotICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc01vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5j
ZVN0cnVjdHVyZSkpOwotfQotCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJl
KiBpbnN0YW5jZVN0cnVjdHVyZSkKLXsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotCi0gICAgY29uc3QgV2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCk7Ci0KLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVy
cm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAgIC8vIElmIHRoZSBsaXN0IG9m
IG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5v
dCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KLSAgICBpZiAobW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjYW4ndCBtYWtlIFdlYkFz
c2VtYmx5Lkluc3RhbmNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmplY3QgYW5kIHRo
ZSBXZWJBc3NlbWJseS5Nb2R1bGUgcmVxdWlyZXMgaW1wb3J0cyIpKSk7Ci0KLSAgICBJZGVudGlm
aWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5h
bWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNy
ZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVj
dHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0KLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGluc3RhbmNl
U3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhl
YykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0KLSAg
ICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxp
c3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9i
amVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KLSAgICAv
LyBMZXQgaW1wb3J0cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1
ZXMuCi0gICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zID0gMDsKLSAgICB1bnNpZ25lZCBu
dW1JbXBvcnRHbG9iYWxzID0gMDsKLQotICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7
Ci0gICAgYm9vbCBoYXNUYWJsZUltcG9ydCA9IGZhbHNlOwotICAgIC8vIEZvciBlYWNoIGltcG9y
dCBpIGluIG1vZHVsZS5pbXBvcnRzOgotICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0cykgewotICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50
IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCi0g
ICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVj
LCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBudWxscHRyKTsKLSAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJv
dyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgp
KQotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOwotCi0gICAgICAg
IC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChvLCBpLml0ZW1fbmFt
ZSkKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1v
ZHVsZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGlt
cG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVs
bHB0cik7Ci0KLSAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewotICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIC8vIDQuIElmIGkgaXMg
YSBmdW5jdGlvbiBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlz
IGZhbHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICgh
dmFsdWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQg
ZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0KiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIC8vIGlpLiBJ
ZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6Ci0gICAgICAgICAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0gICAgICAgICAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIGlmIChp
c1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNt
V3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1
cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGlt
cG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikK
LSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlv
bi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJl
IHYuW1tDbG9zdXJlXV0uCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBw
ZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4
XTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3Rl
ZFNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0
ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNz
ZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gaWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBh
IG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBi
eSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMg
dmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5n
IHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlOiBkb25lIGFzIHBh
cnQgb2YgUGxhbiBjb21waWxhdGlvbi4KLSAgICAgICAgICAgIC8vIGl2LiBBcHBlbmQgdiB0byBm
dW5jcy4KLSAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0
YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2Vi
QXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpT
RnVuY3Rpb24pLgotCi0gICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGlt
cG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9ydEZ1bmN0aW9u
KHZtLCBmdW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKyspOwotICAgICAgICAgICAgLy8gdi4g
QXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWhhc1RhYmxlSW1wb3J0KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFu
dGVlZCBieSBhIHZhbGlkYXRpb24gZmFpbHVyZS4KLSAgICAgICAgICAgIC8vIDcuIE90aGVyd2lz
ZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6Ci0gICAgICAgICAgICBoYXNUYWJsZUltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2Fz
dDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwotICAgICAgICAgICAgLy8gaS4gSWYg
diBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHku
TGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5U
YWJsZSIpKSk7Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IGRlY2xhcmVkSW5pdGlhbCA9IG1vZHVs
ZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwotICAgICAgICAgICAgdWlu
dDMyX3QgaW1wb3J0ZWRJbml0aWFsID0gdGFibGUtPnNpemUoKTsKLSAgICAgICAgICAgIGlmIChp
bXBvcnRlZEluaXRpYWwgPCBkZWNsYXJlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21h
bGwiKSkpOwotCi0gICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZGVjbGFy
ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkp
IHsKLSAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbXBvcnRlZE1heGlt
dW0gPSB0YWJsZS0+bWF4aW11bSgpOwotICAgICAgICAgICAgICAgIGlmICghaW1wb3J0ZWRNYXhp
bXVtKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMg
bm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2Vz
IikpKTsKLSAgICAgICAgICAgICAgICBpZiAoKmltcG9ydGVkTWF4aW11bSA+ICpkZWNsYXJlZE1h
eGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdz
ICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0n
IikpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRh
Ymxlcy4KLSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMu
Ci0gICAgICAgICAgICBpbnN0YW5jZS0+c2V0VGFibGUodm0sIHRhYmxlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1v
cnk6IHsKLSAgICAgICAgICAgIC8vIDYuIElmIGkgaXMgYSBtZW1vcnkgaW1wb3J0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMgc2hvdWxkIGJl
IGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOwotICAgICAgICAgICAgaGFzTWVtb3J5
SW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9
IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKCFtZW1vcnkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNl
IG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7Ci0KLSAgICAgICAgICAgIFdhc206OlBhZ2VDb3Vu
dCBkZWNsYXJlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOwot
ICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGltcG9ydGVkSW5pdGlhbCA9IG1lbW9yeS0+bWVt
b3J5KCkuaW5pdGlhbCgpOwotICAgICAgICAgICAgaWYgKGltcG9ydGVkSW5pdGlhbCA8IGRlY2xh
cmVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBw
cm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1vZHVsZSdzIGRl
Y2xhcmVkICdpbml0aWFsJyBpbXBvcnQgbWVtb3J5IHNpemUiKSkpOwotCi0gICAgICAgICAgICBp
ZiAoV2FzbTo6UGFnZUNvdW50IGRlY2xhcmVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeS5tYXhpbXVtKCkpIHsKLSAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgaW1wb3J0
ZWRNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS5tYXhpbXVtKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpbXBvcnRlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJN
ZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1
aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkTWF4
aW11bSA+IGRlY2xhcmVkTWF4aW11bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
Ik1lbW9yeSBpbXBvcnQgcHJvdmlkZWQgYSAnbWF4aW11bScgdGhhdCBpcyBsYXJnZXIgdGhhbiB0
aGUgbW9kdWxlJ3MgZGVjbGFyZWQgJ21heGltdW0nIGltcG9ydCBtZW1vcnkgc2l6ZSIpKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4K
LSAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgZXhlYywgbWVtb3J5KTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xv
YmFsOiB7Ci0gICAgICAgICAgICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9ydDoKLSAgICAg
ICAgICAgIC8vIGkuIElmIGkgaXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlw
ZUVycm9yLgotICAgICAgICAgICAgQVNTRVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1w
b3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7Ci0g
ICAgICAgICAgICAvLyBpaS4gSWYgdGhlIGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUo
dikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAg
ICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBl
ID09IFdhc206Okk2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xv
YmFsIGNhbm5vdCBiZSBhbiBpNjQiKSkpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBi
ZSBhIG51bWJlciIpKSk7Ci0gICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5
VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxz
ID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1h
dGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
V2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVl
LnRvRmxvYXQoZXhlYykpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1w
b3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAgICBpZiAoISFt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1w
b3J0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBhIE1lbW9yeSBp
bXBvcnQgb3Igd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGhhc01lbW9yeUltcG9ydCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQo
KSk7Ci0gICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5
IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7Ci0g
ICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmhhc1Jlc2VydmVkTWVtb3J5
KCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5ID0ganNNb2R1bGUtPnRha2VSZXNlcnZlZE1lbW9y
eSgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6
TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICAgICAgICAgIGlmICgh
bWVtb3J5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zdGFuY2Ut
PnNldE1lbW9yeSh2bSwgZXhlYywKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1v
cnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBv
cnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzOgorICAg
IC8vIDEpIFRoZSBpbnN0YW5jZSBhbHJlYWR5IGhhcyBhbiBpbml0aWFsaXplZCBDb2RlQmxvY2sg
KHJ1bm5hYmxlKSwgc28gd2UganVzdCBuZWVkIHRvIGZpbmFsaXplQ3JlYXRpb24uCisgICAgLy8g
MikgVGhlIGluc3RhbmNlIGhhcyBubyBDb2RlQmxvY2ssIHNvIHdlIG5lZWQgdG8gbWFrZSBvbmUg
YW5kIGNvbXBpbGUgdGhlIGNvZGUgZm9yIGl0LgorICAgIC8vIDMpIFRoZSBpbnN0YW5jZSBhbHJl
YWR5IGhhcyBhbiB1bmluaXRpYWxpemVkIENvZGVCbG9jaywgc28gd2UgbmVlZCB0byB3YWl0IGZv
ciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgorCisgICAgaWYgKCFpbnN0YW5jZS0+aW5pdGlh
bGl6ZWQoKSkgeworICAgICAgICBpZiAoaW5zdGFuY2UtPmNvZGVCbG9jaygpKQorICAgICAgICAg
ICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KGluc3Rh
bmNlLT5jb2RlQmxvY2soKS0+cGxhbigpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBS
ZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbW9kdWxlLT5zb3Vy
Y2UoKSwgUGxhbjo6RnVsbENvbXBpbGUsIFBsYW46OmRvbnRGaW5hbGl6ZSkpOworICAgICAgICAg
ICAgcGxhbi0+c2V0TW9kZUFuZFByb21pc2UoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRDb2RlQmxvY2sodm0sIHBs
YW4uY29weVJlZigpKTsKKworICAgICAgICAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1
cmVXb3JrbGlzdCgpOworICAgICAgICAgICAgd29ya2xpc3QuZW5xdWV1ZShwbGFuLmNvcHlSZWYo
KSk7CisgICAgICAgICAgICB3b3JrbGlzdC5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KHBsYW4u
Z2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgewotICAgICAgICBpZiAoISFtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24uaXNJbXBvcnQoKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBo
YXZlIGEgVGFibGUgaW1wb3J0IG9yIHdlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24u
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChoYXNUYWJsZUltcG9ydCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFo
YXNUYWJsZUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBj
cmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAgICAg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4
ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1
Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVt
KCkpOwotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRl
IGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCi0gICAgICAgICAgICAvLyBJZiBp
dCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxp
ZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKLSAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7IAotICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dFRhYmxlKHZtLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWluc3RhbmNl
LT5tZW1vcnkoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1lbW9y
eSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxw
dHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAgICBp
bnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgYWRvcHRSZWYoKihuZXcgV2FzbTo6TWVtb3J5KCkpKSkpOwotICAgIH0KLQotICAgIC8v
IEdsb2JhbHMKLSAgICB7Ci0gICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IG1vZHVs
ZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBmb3IgKHNpemVfdCBn
bG9iYWxJbmRleCA9IG51bUltcG9ydEdsb2JhbHM7IGdsb2JhbEluZGV4IDwgbW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFscy5zaXplKCk7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZ2xvYmFsSW5kZXhdOwot
ICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xv
YmFsOjpJc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlw
ZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxz
KTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0
YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChn
bG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwotICAgIEpTVmFsdWUgc3RhcnRSZXN1
bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShzdGFy
dFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
LQotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2
bSwgZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDU5NzA5ZjUxNzU2ZGM1NWVhMmJkMjc4
NjYzNTA1ZTllMzkzN2YwMTMuLjM1OTk2MjJmMmNhMjQ5YjFlMWQ4MTIwY2EzNjNhZDYxNGU1YTZl
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC03NSwxMyArNzUsMTMgQEAgSlNW
YWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJ1ZmYKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHNpemVfdCBieXRlT2Zmc2V0
OwotICAgIHNpemVfdCBieXRlU2l6ZTsKLSAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZl
ckZyb21WYWx1ZShleGVjLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwg
ZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0g
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGUodm0sIGV4ZWMsIHN0cnVjdHVyZSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAg
ICBSZWZQdHI8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCAq
c291cmNlLCBXYXNtOjpQbGFuOjpWYWxpZGF0aW9uLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUp
KTsKKyAgICBpZiAoIXBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICBy
ZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJl
LCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOwogfQogCiBXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQ
cm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZmZmZWU1YzEwZjU5ZjgxZjFiYmUzY2Yx
ZDU0NzdjZjkwYzY4N2Y3MC4uZmI1NjFkOWRkYjg3ZTc0MDcyOWE2MjliNTE4NjE3MDU0OTE2YmEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtNzMsOCArNzMsMTAgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNv
bnN0IFdhc20KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cCA6IG1v
ZHVsZUluZm9ybWF0aW9uLmV4cG9ydHMpCi0gICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVu
dHJ5OjpjcmVhdGVMb2NhbChleHAuZmllbGQsIGV4cC5maWVsZCkpOworICAgIGZvciAoY29uc3Qg
YXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhwb3J0cykgeworICAgICAgICBJZGVudGlm
aWVyIGZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cC5maWVsZCk7CisgICAg
ICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVhdGVMb2NhbChmaWVsZCwgZmllbGQp
KTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTg1LDE0ICs4NywxMyBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9zdGFydEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlID0gaW5zdGFuY2UtPm1vZHVsZSgpOwogICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCk7CiAKQEAgLTExMiw3ICsxMTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YQogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3Jl
YXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFy
ZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVt
IHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3Rp
YyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5k
LiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBl
ciB3aWxsIGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBmdW5j
dGlvbkltcG9ydENvdW50KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCA9IGV4cC5raW5kSW5kZXg7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1w
b3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0
RnVuY3Rpb24oZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1i
bHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OwogICAgICAgICAgICAgICAgIGVsc2UgewpA
QCAtMTI4LDcgKzEyOSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhl
Y1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhCiAgICAgICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
Pndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4
KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0g
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3
YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQs
IGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWdu
YXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzksNyArMTgwLDcgQEAgdm9p
ZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJy
b3IgPSBmYWxzZTsKICAgICAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IHRydWU7CiAg
ICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIHN5bWJvbFRhYmxlUHV0VG91
Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBleHAuZmllbGQsIGV4cG9y
dGVkVmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMs
IHB1dFJlc3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KG1v
ZHVsZUVudmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgZXhwLmZp
ZWxkKSwgZXhwb3J0ZWRWYWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25vcmVSZWFk
T25seUVycm9ycywgcHV0UmVzdWx0KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0
KTsKICAgICB9CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YQog
ICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNT
RVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwogICAgICAgICBpZiAo
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQo
KSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1w
b3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAgICAgICAgICAg
IEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0
RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0s
IHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKQEAgLTI1MSw3ICsyNTIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rp
b25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwogICAgICAgICAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNP
YmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCkp
OworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8
SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5j
dGlvbkltcG9ydCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZt
LCBmdW5jdGlvbkltcG9ydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBldmVy
IGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBh
cyB0aGUgdW53cmFwcGVkIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKaW5kZXggNWRjZWI0MmQ4ZjhjMjA2
OTgyOTRiYWEwYzZiYmNmNDliOGRjZDQzZC4uMmI4MzcyZTdjN2MzMzk0NzhlOWJlNzY1MTc3ZWI4
NTI0MTZkNDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCkBAIC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOworY2xhc3MgSlNXZWJBc3NlbWJs
eU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb247CiAKIC8vIEJhc2VkIG9uIHRoZSBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBzcGVjaWZpY2F0aW9uCkBAIC00Nyw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKLSAgICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAwZDc2Yjli
NTA2NDc5ODY4OTE0NmZhZjM0ZjBlNTBjNWExNDVhMjMzLi4wOWUzM2M0Mjc5ODllMzVmNmFlOTAx
ZGJhNDJhY2YwMmFmZjllZmIwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9K
U1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAzLTI3ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtl
IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlL2NvbXBpbGUgdHJ1bHkgYXN5bmNocm9ub3VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxODcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vYXNzZXJ0
LmpzOgorICAgICAgICAqIHdhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzOgorICAgICAgICAo
YXN5bmMudGVzdFByb21pc2VBUEkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJs
eS1jb21waWxlLXBhcmFsbGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRocm93RXhuKToK
KyAgICAgICAgKGFzeW5jLnRlc3QpOgorICAgICAgICAqIHdhc20vanMtYXBpL3dlYi1hc3NlbWJs
eS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50ZXN0KToK
KyAgICAgICAgKiB3YXNtL2pzLWFwaS93ZWItYXNzZW1ibHktaW5zdGFudGlhdGUuanM6CisgICAg
ICAgIChhc3NlcnQuZXEuYXN5bmMudGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAg
ICAoYXNzZXJ0LmFzeW5jVGVzdC5hc3luYy50ZXN0KToKKyAgICAgICAgKGFzc2VydC5hc3luY1Rl
c3QpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeS5hc3luYy50ZXN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKGFzc2VydC50cnV0aHkpOiBEZWxldGVkLgorCiAyMDE3LTAzLTI3ICBKRiBCYXN0aWVuICA8
amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogbWlzYyBtZW1vcnkg
dGVzdGluZwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pTVGVzdHMvd2Fz
bS9hc3NlcnQuanMKaW5kZXggZTlkYjBhOWIwMTZkMGEyNTlkZmYzZmQ2MmFkMzdkMzdiZDc5MmVh
MS4uZTc5NDI4NzVmMWZmMThiNTc5N2M1YmViNjBhOWNhOTAzOTIzNTYwZCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2Fzc2VydC5qcworKysgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCkBAIC0x
NDQsMyArMTQ0LDI0IEBAIGV4cG9ydCB7CiAgICAgX3Rocm93cyBhcyB0aHJvd3MsCiAgICAgX2lu
c3RhbmNlb2YgYXMgaW5zdGFuY2VvZiwKIH07CisKK2NvbnN0IGFzeW5jVGVzdEltcGwgPSAocHJv
bWlzZSwgdGhlbkZ1bmMsIGNhdGNoRnVuYykgPT4geworICAgIGFzeW5jVGVzdFN0YXJ0KDEpOwor
ICAgIHByb21pc2UudGhlbih0aGVuRnVuYykuY2F0Y2goY2F0Y2hGdW5jKTsKK307CisKK2NvbnN0
IHByaW50RXhuID0gKGUpID0+IHsKKyAgICBwcmludCgiRmFpbGVkOiAiLCBlKTsKKyAgICBwcmlu
dChlLnN0YWNrKTsKK307CisKK2V4cG9ydCBjb25zdCBhc3luY1Rlc3QgPSAocHJvbWlzZSkgPT4g
YXN5bmNUZXN0SW1wbChwcm9taXNlLCBhc3luY1Rlc3RQYXNzZWQsIHByaW50RXhuKTsKK2V4cG9y
dCBjb25zdCBhc3luY1Rlc3RFcSA9IChwcm9taXNlLCBleHBlY3RlZCkgPT4geworICAgIGNvbnN0
IHRoZW5DaGVjayA9ICh2YWx1ZSkgPT4geworICAgICAgICBpZiAodmFsdWUgPT09IGV4cGVjdGVk
KQorICAgICAgICAgICAgcmV0dXJuIGFzeW5jVGVzdFBhc3NlZCgpOworICAgICAgICBwcmludCgi
RmFpbGVkOiBnb3QgIiwgdmFsdWUsICIgYnV0IGV4cGVjdGVkICIsIGV4cGVjdGVkKTsKKworICAg
IH0KKyAgICBhc3luY1Rlc3RJbXBsKHByb21pc2UsIHRoZW5DaGVjaywgcHJpbnRFeG4pOworfTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCmluZGV4IGYzNDNjNmU5M2M3MzEyNWU0
OWFkOTNmNGFhNzJhMWEwOWU2OWUyYmIuLjYzMjQzMDI3YmI5MjM2NzBjY2M4M2MxNTU3NmRkY2E1
ZDllYTZlNzMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUu
anMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwpAQCAtMSw3ICsx
LDYgQEAKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogaW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKLWxldCBkb25lID0gZmFsc2U7CiBhc3luYyBm
dW5jdGlvbiB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICB7CiAgICAgICAgIC8vIENhbid0IGRlY2xh
cmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCkBAIC0xNCwzOSArMTMsMzAgQEAgYXN5bmMgZnVuY3Rp
b24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICAuQ29kZSgpCiAgICAgICAgICAgICAu
RW5kKCk7CiAKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwog
ICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlv
biBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSAoZXZhbHVhdGluZyAnV2Vi
QXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICAg
ICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiBNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3Qg
aWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydC50
cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7
CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKCk7
CiAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAg
ICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAg
IGFzc2VydC5lcShlLm1lc3NhZ2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVm
ZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGls
ZSgpJykiKTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAg
ICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSgyMCk7CiAgICAgICAgIH0gY2F0Y2go
ZSkgewotICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwogICAgICAgICAgICAgYXNzZXJ0LnRydXRo
eShlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3Nh
Z2UsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJh
eUJ1ZmZlciAoZXZhbHVhdGluZyAnV2ViQXNzZW1ibHkuY29tcGlsZSgyMCknKSIpOwogICAgICAg
ICB9Ci0gICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOwogICAgIH0KIAogICAgIHsKQEAgLTYx
LDEwICs1MSw2IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgICAgICBs
ZXQgbW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFz
c2VtYmx5Lk1vZHVsZSk7CiAgICAgfQotCi0gICAgZG9uZSA9IHRydWU7CiB9CiAKLXRlc3RQcm9t
aXNlQVBJKCk7Ci1kcmFpbk1pY3JvdGFza3MoKTsKLWFzc2VydC50cnV0aHkoZG9uZSk7Cithc3Nl
cnQuYXN5bmNUZXN0KHRlc3RQcm9taXNlQVBJKCkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS93ZWItYXNzZW1ibHktY29tcGlsZS1wYXJhbGxlbC5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJmZWFl
Y2I5ZTg0MTcyODNlYzRhOWFhNzQ5ODJiOTRjYjQwOWQ2OAotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWNvbXBpbGUtcGFyYWxsZWwuanMKQEAgLTAs
MCArMSw1OCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBv
cnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKworYXN5bmMgZnVuY3Rpb24gdGhyb3dF
eG4oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIHRlc3Qo
KSB7CisgICAgY29uc3QgbG9vcERlcHRoID0gMTA7CisgICAgY29uc3QgbnVtQ29tcGlsYXRpb25z
ID0gMTsKKyAgICBjb25zdCBudW1WYXJzID0gMzA7CisgICAgY29uc3QgcGFyYW1zID0gW107Cisg
ICAgcGFyYW1zLmxlbmd0aCA9IG51bVZhcnM7CisgICAgcGFyYW1zLmZpbGwoImkzMiIpOworCisg
ICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAuVHlwZSgpLkVuZCgp
CisgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgIC5FbmQoKQorICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zLCByZXQ6ICJpMzIiIH0p
OworCisgICAgY29uc3QgbWFrZUxvb3AgPSAoYnVpbGRlciwgZGVwdGgpID0+IHsKKyAgICAgICAg
aWYgKGRlcHRoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisKKyAgICAgICAg
YnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgICAgIC5Mb29wKCJpMzIiLCAoYikgPT4geworICAg
ICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAg
IC5UZWVMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIKKworICAgIH0KKworICAgIGJ1aWxk
ZXIgPSBtYWtlTG9vcChidWlsZGVyLCBsb29wRGVwdGgpOworICAgIGJ1aWxkZXIgPSBidWlsZGVy
LkVuZCgpLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpOworCisgICAgbGV0IGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgbnVtQ29tcGlsYXRpb25zOyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2Vi
QXNzZW1ibHkuY29tcGlsZShiaW4pKTsKKyAgICB9CisKKyAgICBhd2FpdCBQcm9taXNlLmFsbChj
b21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0YW50aWF0ZS1wYXJhbGxlbC5q
cyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLXBhcmFsbGVs
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI0NDdiY2FkMGI4ODgwNDc2YTc4M2JkZGMxYTk0MWNlYTQyNjBkY2UK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0
YW50aWF0ZS1wYXJhbGxlbC5qcwpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMn
OworCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNvbnN0IGxvb3BEZXB0aCA9IDEwMDsK
KyAgICBjb25zdCBudW1Db21waWxhdGlvbnMgPSAxOworICAgIGNvbnN0IG51bVZhcnMgPSAzMDsK
KyAgICBjb25zdCBwYXJhbXMgPSBbXTsKKyAgICBwYXJhbXMubGVuZ3RoID0gbnVtVmFyczsKKyAg
ICBwYXJhbXMuZmlsbCgiaTMyIik7CisKKyAgICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigp
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
Lk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHsgaW5pdGlhbDogMCB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXMsIHJldDogImkzMiIgfSk7CisKKyAgICBjb25z
dCBtYWtlTG9vcCA9IChidWlsZGVyLCBkZXB0aCkgPT4geworICAgICAgICBpZiAoZGVwdGggPT09
IDApCisgICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKKworICAgICAgICBidWlsZGVyID0gYnVp
bGRlcgorICAgICAgICAgICAgLkxvb3AoImkzMiIsIChiKSA9PiB7CisgICAgICAgICAgICAgICAg
Yi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAgIC5UZWVMb2NhbCgwKQor
ICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VMb29wKGIsIGRlcHRoIC0gMSkuQnIoMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgfQorCisgICAgYnVpbGRlciA9IG1ha2VMb29wKGJ1
aWxkZXIsIGxvb3BEZXB0aCk7CisgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuRW5kKCk7CisK
KyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IDAgfSk7CisgICAgY29u
c3QgaW1wb3J0T2JqZWN0ID0geyAiaW1wIjogeyAibWVtb3J5IjogbWVtb3J5IH0gfTsKKworICAg
IC8vIENvbXBpbGUgYSBidW5jaCBvZiBpbnN0YW5jZXMgaW4gcGFyYWxsZWwuCisgICAgbGV0IGNv
bXBpbGF0aW9ucyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcGlsYXRpb25z
OyArK2kpIHsKKyAgICAgICAgY29tcGlsYXRpb25zLnB1c2goV2ViQXNzZW1ibHkuaW5zdGFudGlh
dGUoYmluLCBpbXBvcnRPYmplY3QpKTsKKyAgICB9CisKKyAgICBsZXQgW2luc3RdID0gYXdhaXQg
UHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKyAgICBsZXQgbW9kdWxlID0gaW5zdC5tb2R1bGU7
CisKKyAgICAvLyBDb21waWxlIGEgYnVuY2ggb2YgaW5zdGFuY2VzIGZyb20gbW9kdWxlcyBpbiBw
YXJhbGxlbC4KKyAgICBjb21waWxhdGlvbnMgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IG51bUNvbXBpbGF0aW9uczsgKytpKSB7CisgICAgICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgfQorCisgICAg
YXdhaXQgUHJvbWlzZS5hbGwoY29tcGlsYXRpb25zKTsKKworICAgIC8vIENvbXBpbGUgYW4gaW5z
dGFuY2UgZnJvbSBhIG1vZHVsZSBpbiBwYXJhbGxlbCwgaGF2ZSBzeW5jIGNvbXBpbGF0aW9uIHN0
ZWFsIGl0LgorICAgIGNvbXBpbGF0aW9ucyA9IFtdOworICAgIGNvbXBpbGF0aW9ucy5wdXNoKFdl
YkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgaW5zdCA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGltcG9ydE9iamVjdCk7CisKKyAgICBh
d2FpdCBQcm9taXNlLmFsbChjb21waWxhdGlvbnMpOworfQorCithc3NlcnQuYXN5bmNUZXN0KHRl
c3QoKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3dlYi1hc3NlbWJseS1pbnN0
YW50aWF0ZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRl
LmpzCmluZGV4IGE5M2JjNjA1ZmYxN2RkZWU4MDFmN2E3NTMzNDE4NmE4NjFkNDQyYWQuLmZiNDg4
N2EwN2M0ZTc5MWViMzU1MDg3NjU4OTg1OTg5MGViMjE2NGUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvd2ViLWFzc2VtYmx5LWluc3RhbnRpYXRlLmpzCkBAIC0xOSwxOCArMTksMTQgQEAg
YXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25z
dCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZh
bHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIGxldCB7bW9kdWxlLCBp
bnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pOwogICAgICAgICBh
c3NlcnQudHJ1dGh5KG1vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAg
ICAgIGFzc2VydC50cnV0aHkoaW5zdGFuY2UgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5JbnN0YW5j
ZSk7CiAgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygyMCksIDEpOwotICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rh
c2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRl
c3QoKSk7CiB9CiAKIHsKQEAgLTQ4LDE5ICs0NCwxNSBAQCBhc3NlcnQuZXEoV2ViQXNzZW1ibHku
aW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFsc2U7CiAgICAgYXN5bmMgZnVuY3Rp
b24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxldCB7bW9kdWxlLCBpbnN0
YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwpOwogICAgICAg
ICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJzZWNvbmQg
YXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgbXVzdCBiZSB1bmRlZmluZWQgb3Ig
YW4gT2JqZWN0IChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIG51bGwp
JykiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0
KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAg
ICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAgLTc4LDIwICs3MCwxNiBAQCBh
c3NlcnQuZXEoV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUubGVuZ3RoLCAxKTsKIAogICAgIGNvbnN0
IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIAotICAgIGxldCBkb25lID0gZmFs
c2U7CiAgICAgYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAg
ICAgIGxldCB7bW9kdWxlLCBpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZShiaW4pOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHko
ZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgICAgICAgICBhc3Nl
cnQuZXEoZS5tZXNzYWdlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6IGNv
bnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLCBpbiBmdW5jdGlvbiBhdCBp
bmRleCAwIChldmFsdWF0aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4pJykiKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCB2YWxpZGF0ZTogY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUsIGlu
IGZ1bmN0aW9uIGF0IGluZGV4IDAiKTsKICAgICAgICAgfQotICAgICAgICBkb25lID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7Ci0gICAgYXNzZXJ0
LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7CiB9CiAKIHsKQEAg
LTExMCwxOSArOTgsMTUgQEAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0
aCwgMSk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAK
LSAgICBsZXQgZG9uZSA9IGZhbHNlOwogICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICBsZXQge21vZHVsZSwgaW5zdGFuY2V9ID0gYXdhaXQgV2Vi
QXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKICAgICAgICAg
fSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5IGlt
cG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0aW5n
ICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJykiKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAgICAgICAgfQotICAgICAgICBk
b25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tzKCk7
Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3QoKSk7
CiB9CiAKIHsKQEAgLTE0MSwyMCArMTI1LDE2IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5pbnN0
YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlvbiB0
ZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gYXdhaXQg
V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7aW1wOiB7bWVtb3J5OiAyMH19KTsKICAgICAg
ICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBhc3NlcnQuZXEoZS5tZXNzYWdlLCAiTWVtb3J5
IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IChldmFsdWF0
aW5nICdXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHtpbXA6IHttZW1vcnk6IDIwfX0pJyki
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcShlLm1lc3NhZ2UsICJNZW1vcnkgaW1wb3J0IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKTsKICAgICAgICAgfQotICAgICAg
ICBkb25lID0gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZXN0KCk7Ci0gICAgZHJhaW5NaWNyb3Rhc2tz
KCk7Ci0gICAgYXNzZXJ0LnRydXRoeShkb25lKTsKKyAgICBhc3NlcnQuYXN5bmNUZXN0KHRlc3Qo
KSk7CiB9CiAKIHsKQEAgLTE3MiwxOCArMTUyLDE0IEBAIGFzc2VydC5lcShXZWJBc3NlbWJseS5p
bnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOwogCi0gICAgbGV0IGRvbmUgPSBmYWxzZTsKICAgICBhc3luYyBmdW5jdGlv
biB0ZXN0KCkgewogICAgICAgICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOwogICAgICAgICBsZXQgaW5zdGFuY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZShtb2R1bGUpOwogICAgICAgICBhc3NlcnQudHJ1dGh5KGluc3RhbmNlIGluc3RhbmNlb2YgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UpOwogICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5m
b28oMjApLCAxKTsKLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQogCi0gICAgdGVzdCgpOwot
ICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7CisgICAgYXNz
ZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQogCiB7CkBAIC0yMDIsNyArMTc4LDYgQEAgYXNzZXJ0
LmVxKFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlLmxlbmd0aCwgMSk7CiAKICAgICBjb25zdCBiaW4g
PSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiAKLSAgICBsZXQgZG9uZSA9IGZhbHNlOwog
ICAgIGFzeW5jIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBh
d2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgyNSk7CkBAIC0yMTAsMTAgKzE4NSw3IEBAIGFz
c2VydC5lcShXZWJBc3NlbWJseS5pbnN0YW50aWF0ZS5sZW5ndGgsIDEpOwogICAgICAgICAgICAg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBtZXNzYWdlIGhlcmUuCiAgICAgICAgICAgICBhc3NlcnQu
ZXEoZS5tZXNzYWdlLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcg
b3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ1dlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKDI1
KScpIik7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQogCi0gICAgdGVz
dCgpOwotICAgIGRyYWluTWljcm90YXNrcygpOwotICAgIGFzc2VydC50cnV0aHkoZG9uZSk7Cisg
ICAgYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwogfQo=
</data>
<flag name="review"
          id="327031"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>