<?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>170134</bug_id>
          
          <creation_ts>2017-03-27 13:30:31 -0700</creation_ts>
          <short_desc>WebAssembly: Implement tier up</short_desc>
          <delta_ts>2017-10-11 09:01:24 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170133</blocked>
    
    <blocked>170136</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>fpizlo</cc>
    
    <cc>gauravdewan007</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>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291589</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 13:30:31 -0700</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291936</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-03-28 10:37:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/31301163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301090</commentid>
    <comment_count>2</comment_count>
      <attachid>308111</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-25 10:22:36 -0700</bug_when>
    <thetext>Created attachment 308111
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301091</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-25 10:23:24 -0700</bug_when>
    <thetext>Just rewrote 50% of this so it&apos;s super broken still.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301103</commentid>
    <comment_count>4</comment_count>
      <attachid>308111</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-25 10:37:32 -0700</bug_when>
    <thetext>Comment on attachment 308111
WIP

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

Looks pretty good to me.

&gt; Source/JavaScriptCore/jsc.cpp:3194
&gt; +    Ref&lt;Wasm::BBQPlan&gt; plan = adoptRef(*new Wasm::BBQPlan(vm, static_cast&lt;uint8_t*&gt;(source-&gt;vector()), source-&gt;length(), Wasm::BBQPlan::FullCompile, Wasm::Plan::dontFinalize()));

This naming scheme is epic.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:859
&gt; +    BasicBlock* continuation = m_proc.addBlock();
&gt; +
&gt; +    Value* countDownLocation = constant(pointerType(), reinterpret_cast&lt;uint64_t&gt;(m_tierUp));
&gt; +    Value* oldCountDown = entry-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Load, Int32, origin(), countDownLocation);
&gt; +    Value* newCountDown = entry-&gt;appendNew&lt;Value&gt;(m_proc, Sub, origin(), oldCountDown, constant(Int32, decrementCount));
&gt; +    entry-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Store, origin(), newCountDown, countDownLocation);
&gt; +
&gt; +    Value* underFlowed = entry-&gt;appendNew&lt;Value&gt;(m_proc, Above, origin(), newCountDown, oldCountDown);
&gt; +
&gt; +    {
&gt; +        BasicBlock* tierUp = m_proc.addBlock();
&gt; +        entry-&gt;appendNew&lt;Value&gt;(m_proc, B3::Branch, origin(), underFlowed);
&gt; +        entry-&gt;setSuccessors(FrequentedBlock(tierUp, FrequencyClass::Rare), FrequentedBlock(continuation));
&gt; +
&gt; +        tierUp-&gt;appendNew&lt;CCallValue&gt;(m_proc, B3::Void, origin(), Effects::forCall(),
&gt; +            constant(pointerType(), reinterpret_cast&lt;uint64_t&gt;(runOMGPlanForIndex)),
&gt; +            materializeWasmContext(tierUp),
&gt; +            constant(Int32, m_functionIndex));
&gt; +
&gt; +        tierUp-&gt;appendNewControlValue(m_proc, Jump, origin(), continuation);
&gt; +    }
&gt; +
&gt; +    return continuation;

Interesting!  I would have made this a patchpoint to save compile time.  Compile time is correlated to basic block count.

No need to make this change now.  I think it&apos;s fine to land it like this.  I would put in a FIXME and link to a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301379</commentid>
    <comment_count>5</comment_count>
      <attachid>308180</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-25 18:20:38 -0700</bug_when>
    <thetext>Created attachment 308180
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301807</commentid>
    <comment_count>6</comment_count>
      <attachid>308299</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-26 16:03:33 -0700</bug_when>
    <thetext>Created attachment 308299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301809</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-26 16:05:30 -0700</bug_when>
    <thetext>Attachment 308299 did not pass style-queue:


ERROR: Source/JavaScriptCore/jsc.cpp:81:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:837:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmTierUpCount.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmModule.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:188:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:309:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:48:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOMGPlan.h:71:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:139:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmCodeBlock.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlanInlines.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 12 in 46 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>1301817</commentid>
    <comment_count>8</comment_count>
      <attachid>308299</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-26 16:12:20 -0700</bug_when>
    <thetext>Comment on attachment 308299
Patch

File a bug about keeping the list of callsites in zombie BBQ code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301827</commentid>
    <comment_count>9</comment_count>
      <attachid>308304</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-26 16:29:52 -0700</bug_when>
    <thetext>Created attachment 308304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301846</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-26 16:55:11 -0700</bug_when>
    <thetext>Committed r215843: &lt;http://trac.webkit.org/changeset/215843&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301861</commentid>
    <comment_count>11</comment_count>
      <attachid>308304</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-26 17:32:36 -0700</bug_when>
    <thetext>Comment on attachment 308304
Patch

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

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:1024
&gt; +    void ensureCacheLineSpace(size_t instructionSize)

Is this even called from anywhere?

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:1027
&gt; +        const size_t cacheLineSize = 64;

How does this work when we do branch compaction? I would&apos;ve thought this should live in link buffer.

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301878</commentid>
    <comment_count>12</comment_count>
      <attachid>308304</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-26 18:15:17 -0700</bug_when>
    <thetext>Comment on attachment 308304
Patch

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

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2017

&gt; Source/JavaScriptCore/wasm/WasmCodeBlock.h:123
&gt; +    Vector&lt;void*&gt; m_wasmEntryPoints;

Is this only used for indirect calls? I wonder if we can pick a better name.

&gt; Source/JavaScriptCore/wasm/WasmMachineThreads.cpp:40
&gt; +    static LazyNeverDestroyed&lt;MachineThreads&gt; threads;

Does MachineThreads handle when threads get destroyed?

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:53
&gt; +OMGPlan::OMGPlan(VM&amp; vm, Ref&lt;Module&gt; module, uint32_t functionIndex, MemoryMode mode, CompletionTask&amp;&amp; task)

This naming is glorious

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:127
&gt; +    // the updates to B but still not have reset it&apos;s cache of A&apos;, which would lead to all kinds of badness.

typo: it&apos;s =&gt; its

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:149
&gt; +        for (unsigned i = 0; i &lt; m_codeBlock-&gt;m_wasmToWasmCallsites.size(); ++i) {
&gt; +            if (i != functionIndexSpace)
&gt; +                repatchCalls(m_codeBlock-&gt;m_wasmToWasmCallsites[i]);
&gt; +        }

I wonder if we should come up w/ a more efficient way to do this.

&gt; Source/JavaScriptCore/wasm/WasmTierUpCount.h:41
&gt; +    // This class manages the tier up counts for Wasm binaries. The main interesting thing about
&gt; +    // wasm tiering up counts is that the least significant bit indicates if the tier up has already
&gt; +    // started. Also, wasm code does not atomically update this count. This is because we
&gt; +    // don&apos;t care too much if the countdown is slightly off. The tier up trigger is atomic, however,
&gt; +    // so tier up will be triggered exactly once.
&gt; +    class TierUpCount {

Style: None of this should be indented.

&gt; Source/JavaScriptCore/wasm/WasmTierUpCount.h:45
&gt; +            : m_count(Options::webAssemblyOMGTierUpCount() * 2)

Why not just have the option be the real count?

&gt; Source/JavaScriptCore/wasm/WasmTierUpCount.h:61
&gt; +        bool shouldStartTierUp()
&gt; +        {
&gt; +            return !(WTF::atomicExchangeOr(&amp;m_count, 1) &amp; 1);
&gt; +        }

Style nit:
this is deceptively effectful. I wonder if we should use a name that indicates this better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301885</commentid>
    <comment_count>13</comment_count>
      <attachid>308304</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-26 18:50:38 -0700</bug_when>
    <thetext>Comment on attachment 308304
Patch

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

&gt;&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:1024
&gt;&gt; +    void ensureCacheLineSpace(size_t instructionSize)
&gt; 
&gt; Is this even called from anywhere?

Yeah, I got rid of this.

&gt;&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:1027
&gt;&gt; +        const size_t cacheLineSize = 64;
&gt; 
&gt; How does this work when we do branch compaction? I would&apos;ve thought this should live in link buffer.

Yeah, this was wrong, I forgot to delete this.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:2
&gt;&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2017

Whoops, I&apos;ll fix.

&gt;&gt; Source/JavaScriptCore/wasm/WasmCodeBlock.h:123
&gt;&gt; +    Vector&lt;void*&gt; m_wasmEntryPoints;
&gt; 
&gt; Is this only used for indirect calls? I wonder if we can pick a better name.

Yeah, We could call it m_wasmIndirectCallEntrypoints. That kinda makes it sound like it&apos;s different than the regular entrypoint though.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMachineThreads.cpp:40
&gt;&gt; +    static LazyNeverDestroyed&lt;MachineThreads&gt; threads;
&gt; 
&gt; Does MachineThreads handle when threads get destroyed?

Yeah, they are destroyed (and removed from the list) when pthreads frees some thread specific data we allocate.

&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:2
&gt;&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2017

Whoops, I&apos;ll fix.

&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:127
&gt;&gt; +    // the updates to B but still not have reset it&apos;s cache of A&apos;, which would lead to all kinds of badness.
&gt; 
&gt; typo: it&apos;s =&gt; its

Ditto.

&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:149
&gt;&gt; +        }
&gt; 
&gt; I wonder if we should come up w/ a more efficient way to do this.

Yeah, we could keep another list. It might also be more efficient if we did every thing in batches.

&gt;&gt; Source/JavaScriptCore/wasm/WasmTierUpCount.h:41
&gt;&gt; +    class TierUpCount {
&gt; 
&gt; Style: None of this should be indented.

Whoops, I&apos;ll fix.

&gt;&gt; Source/JavaScriptCore/wasm/WasmTierUpCount.h:45
&gt;&gt; +            : m_count(Options::webAssemblyOMGTierUpCount() * 2)
&gt; 
&gt; Why not just have the option be the real count?

Then we would need to be sure that the count was a multiple of 2. Also, it would make the option harder to read since you would always need to know the number should be divided by two.

&gt;&gt; Source/JavaScriptCore/wasm/WasmTierUpCount.h:61
&gt;&gt; +        }
&gt; 
&gt; Style nit:
&gt; this is deceptively effectful. I wonder if we should use a name that indicates this better.

Hmm, I&apos;ll try to think of a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359202</commentid>
    <comment_count>14</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-11 09:01:24 -0700</bug_when>
    <thetext>*** Bug 178165 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308111</attachid>
            <date>2017-04-25 10:22:36 -0700</date>
            <delta_ts>2017-04-25 18:20:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170134-20170425102236.patch</filename>
            <type>text/plain</type>
            <size>142285</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZDIxZDQxZDNlMTQ0NWVjZjM5Nzg4ZWZkMzM5ZjJiZWFjMGYyYTA2Li5jYzhiNGU0MzliNGI5YmZh
YmYwNDBjNGZlN2QzN2VkYTFjNWM1MTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDkgQEAKKzIwMTctMDQtMjUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IEltcGxlbWVudCB0aWVyIHVwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
ZW5zdXJlQ2FjaGVMaW5lU3BhY2UpOgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24u
aDoKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uVGhyZWFkU2FmZU5lYXJDYWxsOjpDb2RlTG9j
YXRpb25UaHJlYWRTYWZlTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
dGhyZWFkU2FmZU5lYXJDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnRocmVhZFNhZmVQ
YXRjaGFibGVOZWFyQ2FsbCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
VGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrOjpkaWRBY3F1aXJlTG9jayk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNw
cDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwLgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENvdW50SG9s
ZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6On5U
aHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVG
dW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6ZXhwb3J0cyk6CisgICAgICAgIChKU0M6Oldh
c206OkJCUVBsYW46OmludGVybmFsRnVuY3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OnRha2VNb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkJC
UVBsYW46OnRha2VDYWxsTGlua0luZm9zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp0
YWtlV2FzbVRvV2FzbUNhbGxzaXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnRh
a2VUaWVyVXBDb3VudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpoYXNCZWVuUHJl
cGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oLgorICAgICAgICAo
SlNDOjpXYXNtOjpCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9X
YXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAg
ICAqIHdhc20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmVudHJ5
cG9pbnQpOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OnRpZXJVcENvdW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q29kZUJsb2NrOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uOjpDYWxsYWJsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q2FsbGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bik6CisgICAgICAgICogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRocmVhZHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpzdGFydFRyYWNraW5n
Q3VycmVudFRocmVhZCk6CisgICAgICAgIChKU0M6Oldhc206OnJlc2V0SW5zdHJ1Y3Rpb25DYWNo
ZU9uQWxsVGhyZWFkcyk6CisgICAgICAgICogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oLgorICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VWYWxpZGF0
aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVZhbGlkYXRpb25DYWxsYmFjayk6
CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1
bGUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb2RlQmxvY2tGb3IpOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAoSlNDOjpXYXNtOjpydW5PTUdQbGFuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2Fz
bU9NR1BsYW4uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW5JbmxpbmVzLmguCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW5Db21wbGV0
aW9uVGFza3MpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjphZGRDb21wbGV0aW9uVGFzayk6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OndhaXRGb3JDb21wbGV0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpmYWlsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6c3RhdGVT
dHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjptb3ZlVG9TdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwcmVwYXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENv
dW50SG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6VGhyZWFkQ291
bnRIb2xkZXI6On5UaHJlYWRDb3VudEhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpjb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpleHBvcnRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6dGFrZU1vZHVsZUluZm9ybWF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZUNhbGxMaW5rSW5mb3MpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlV2FzbVRvV2FzbUV4aXRTdHVicyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46Omhhc1dvcmspOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjpoYXNCZWVuUHJlcGFyZWQpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
V2FzbVRpZXJVcENvdW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbklubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRp
ZXJVcENvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Omxvb3BEZWNyZW1l
bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeURlY3Jl
bWVudCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpzaG91bGRTdGFydFRpZXJV
cCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAqIHdhc20vV2Fz
bVdvcmtsaXN0Lmg6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjp3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp3YXNtVG9K
c0NhbGxTdHViRm9ySW1wb3J0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5
RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Ondhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbGFibGVGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp3YXNtRW50
cnlwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9m
ZnNldE9mV2FzbUVudHJ5cG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFs
dWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y2FsbGFibGVGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp3YXNtRW50cnlwb2ludCk6
IERlbGV0ZWQuCisKIDIwMTctMDQtMjQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxl
LmNvbT4KIAogICAgICAgICB0ZXN0MjYyOiB0ZXN0MjYyL3Rlc3QvbGFuZ3VhZ2Uvc3RhdGVtZW50
cy9mb3Itb2YvZHN0ci1hcnJheS1lbGVtLWluaXQtZm4tbmFtZS1hcnJvdy5qcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2YWRh
NTU0OWM2MTAzYzA2ZGRhMjliZDE1YTQ1MDYwMTc5MmEzZDQ4Li4zNmZmYmMyNWViYWM4ZTI2YjAz
NzlhOWFiNGJkZjQ2NTUyYmIwMjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE3LTA0LTI1ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBJbXBsZW1lbnQgdGllciB1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwMTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpBdG9taWM6OnN0
b3JlUmVsYXhlZCk6CisKIDIwMTctMDQtMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFN3aXRjaCB0byB1c2UgRU5BQkxFX1JFTU9U
RV9JTlNQRUNUT1IgaW5zdGVhZCBvZiBFTkFCTEVfSU5TUEVDVE9SX1NFUlZFUiBmb3IgdGhlIHJl
bW90ZSBpbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDkwYTYwNmY5
MDhlZmNhYzY3NzIwZDk1ZDQzZjU2MTYyYmZjMzZkMC4uMmM3ZjAxODhlNzg4MTI5MGI5MjhjMGU5
NDVmZDQ0YTViOGRlZjNhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNDAs
NiArMTM0MCw4IEBACiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDExRTdBMEI2RTAwM0MxOURE
IC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OwogCQk1MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovOyB9
OworCQk1MzExQkQ0QTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENDgxRUE1ODFFNTAw
NTI1MjgxIC8qIFdhc21PTUdQbGFuLmNwcCAqLzsgfTsKKwkJNTMxMUJENEIxRUE1ODFFNTAwNTI1
MjgxIC8qIFdhc21PTUdQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ0OTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCAqLzsg
fTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdB
MEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdh
c21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0Ix
NURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9w
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
Mzc0LDEwICsxMzc2LDE1IEBACiAJCTUzQjBCRTM4MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlLmNwcCAqLzsgfTsKIAkJNTNDNkZFRUYxRThBREZBOTAwQjE4NDI1IC8qIFdhc21P
cGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi87IH07
CiAJCTUzQzZGRUYxMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzZGRUYwMUU4QUZF
MEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLzsgfTsKKwkJNTNDQTczMDkxRUE1
MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJR
UGxhbi5jcHAgKi87IH07CisJCTUzQ0E3MzBBMUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDQTcz
MDgxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggKi87IH07CiAJCTUzRDQ0NERDMURB
RjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBC
M1dhc21BZGRyZXNzVmFsdWUuaCAqLzsgfTsKIAkJNTNENDQ0REUxREFGMDlBMDAwQjkyNzg0IC8q
IEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0Q0NDRERDFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1Zh
bHVlLmNwcCAqLzsgfTsKIAkJNTNFNzc3RTMxRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNw
cCAqLzsgfTsKIAkJNTNFNzc3RTQxRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1h
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNF
Nzc3RTIxRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5oICovOyB9Owor
CQk1M0U5RTBBQjFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTlFMEE5MUVBRTgz
REUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwICovOyB9OworCQk1M0U5RTBBQzFF
QUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyog
V2FzbU1hY2hpbmVUaHJlYWRzLmggKi87IH07CisJCTUzRTlFMEFGMUVBRUM0NTcwMEZFRTI1MSAv
KiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAq
LzsgfTsKIAkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODQxRDU4Rjk3
NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovOyB9OwogCQk1M0Y0MEU4QjFENTkwMUJCMDA5
OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0
aW9uUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0
MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovOyB9OwpAQCAtMTM4Niw3ICsx
MzkzLDcgQEAKIAkJNTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRTk3
MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAv
KiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVE
IC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8q
IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAv
KiBXYXNtUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAq
LzsgfTsKKwkJNTNGOEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGOEQxRkYx
RTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5oICovOyB9OwogCQk1M0ZBMkFF
MTFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJ
NTNGRDA0RDMxRDdBQjI3NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMTFEN0FC
MTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKQEAgLTM4NTks
NiArMzg2Niw4IEBACiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwRkIzMDExRTdBMEI2RTAwM0Mx
OUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
YXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwRkIzMDMxRTdB
MTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzExQkQ0ODFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU9NR1BsYW4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ0OTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1Bs
YW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9NR1BsYW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdh
c21QbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBX
YXNtUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGxh
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRE
NTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21P
cHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4OTgsMTAgKzM5MDcsMTUgQEAK
IAkJNTNCMEJFMzcxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUVFMUU4
QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21PcGNvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU9wY29kZU9yaWdpbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAv
KiBXYXNtQkJRUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtQkJRUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQ0E3MzA4MUVB
NTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtQkJRUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Q0
NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5oOyBwYXRoID0gYjMvQjNX
YXNtQWRkcmVzc1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERE
MURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RTc3N0UxMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFNzc3RTIxRTkyRTI2NTAwN0NCRUM0
IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWFjaGluZVRocmVhZHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEg
LyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21NYWNoaW5lVGhyZWFkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0U5
RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaWVyVXBDb3VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3NjggLyogSlNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
NDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtU2VjdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRnVuY3Rpb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM5MTEsNyArMzkyNSw3IEBACiAJCTUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1vZHVsZVBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1
RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBX
YXNtUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBs
YW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjhEMUZGMUU4Mzg3
RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbUJCUVBsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTElu
dFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0
RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjMzNyw2ICs2MzUxLDkgQEAKIAkJCQlBRDJG
Q0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQwRThF
MUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBF
OTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTNDQTcz
MDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKKwkJCQk1M0NBNzMwODFF
QTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAqLywKKwkJCQk1M0Y4RDFGRjFFODM4N0Q0
MDBEMjExMTYgLyogV2FzbUJCUVBsYW5JbmxpbmVzLmggKi8sCiAJCQkJQUQ0QjFERjcxREYyNDRE
NzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmNwcCAqLywKIAkJCQlBRDRCMURGODFERjI0NEQ3MDA3
MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLywKIAkJCQk1MjVDMERENzFFOTM1ODQ3MDAyMTg0Q0Qg
LyogV2FzbUNhbGxlZS5jcHAgKi8sCkBAIC02MzUxLDYgKzYzNjgsOCBAQAogCQkJCUFEMkZDQzMy
MURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLywKIAkJCQk3QkM1NDdEMjFCNjk1
OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5
QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKKwkJCQk1M0U5RTBBOTFFQUU4M0RFMDBG
RUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKKwkJCQk1M0U5RTBBQTFFQUU4M0RF
MDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThF
QzAwNTJEN0NEIC8qIFdhc21Nb2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUy
RDdDRCAvKiBXYXNtTW9kdWxlLmggKi8sCiAJCQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8q
IFdhc21NZW1vcnkuY3BwICovLApAQCAtNjM2MSw2ICs2MzgwLDggQEAKIAkJCQk1M0U3NzdFMjFF
OTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggKi8sCiAJCQkJNTNGNDBF
OTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQw
RTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCisJCQkJNTMxMUJE
NDgxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNwcCAqLywKKwkJCQk1MzExQkQ0OTFF
QTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCAqLywKIAkJCQlBREI2RjY3QzFFMTVENzUw
MDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8sCiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAw
OTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovLAogCQkJCTUzODFCOTM4MUU2
MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggKi8sCkBAIC02MzcwLDEy
ICs2MzkxLDEyIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIu
aCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAog
CQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAotCQkJCTUzRjhE
MUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtUGxhbklubGluZXMuaCAqLywKIAkJCQk1M0Y0MEU4
NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0
NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3
OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAw
MjlBOTMyIC8qIFdhc21UaHVua3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkz
MiAvKiBXYXNtVGh1bmtzLmggKi8sCisJCQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdh
c21UaWVyVXBDb3VudC5oICovLAogCQkJCTUzRkY3RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNt
VmFsaWRhdGUuY3BwICovLAogCQkJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFs
aWRhdGUuaCAqLywKIAkJCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0
LmNwcCAqLywKQEAgLTg5MTYsNiArODkzNyw3IEBACiAJCQkJNzk2REFBMkIxRTg5Q0NENjAwNURG
MjRBIC8qIENhbGxlZUJpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFOTlCMjQ5MUMyNEMzRDMw
MEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTRE
MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
M0NBNzMwQTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBK
SVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjYzLDcgKzkyODUsNyBAQAog
CQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyog
V2FzbUJCUVBsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJENjBFMTcwNzA4
MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjdDMzlGQjFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC05MzMwLDEwICs5MzUyLDEyIEBACiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRFODdG
QzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRTlFMEFDMUVBRTgzREYwMEZFRTI1MSAvKiBXYXNt
TWFjaGluZVRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0
MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFC
MjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVy
VXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3NTIxODNFQTEwNDAwMzIwMjlGIC8q
IFN0YWNrQWxpZ25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZEQjdFOTFENjEyNEI1MDBD
REJGOEUgLyogU3RhY2tGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FC
NjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzgxLDYgKzk0
MDUsNyBAQAogCQkJCTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzQyMjEyMUQ2QjgxQzMwMDMyQkU4OCAvKiBUaHJvd1Nj
b3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1
bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMTFCRDRCMUVBNTgxRTUwMDUyNTI4
MSAvKiBXYXNtT01HUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAw
NTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0Qx
M0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1NTk4OTgxN0M4NkM1ODAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMDg1LDYgKzEwMTEwLDcgQEAKIAkJCQkwRkVDODUwRjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNEI0Q0ExRTg4
OUQ3QjAwREJCRTg2IC8qIEIzVmFyaWFibGVMaXZlbmVzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUzQ0E3MzA5MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzBGQjMwNDFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdv
cmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDIyQTYyMUMxNThFNkEwMEUyRUI5OCAv
KiBCM0NvbnN0RmxvYXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOERGNTFCRTkz
RDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAxODksNiArMTAyMTUsNyBAQAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21w
bGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVC
NTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzExQkQ0QTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTcxNEJGMUNEODA0QTQwMDA0RDJDNiAvKiBDb25z
b2xlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAyNzQsNiArMTAzMDEsNyBAQAogCQkJ
CTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTM4MUI5MzcxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8q
IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUz
RTlFMEFCMUVBRTgzREYwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4OThGMzExQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjNEMTgyMDIxMTkw
MDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCAyZWI0NTFkNWQ0MTc5MmUyNzJhZmI0
NGZhY2U3YzAyZTMwYzJkNzJjLi43NmVkZTU5MWJkNDU4MTg2NjkzZGIyMGRmMzMyMTc0ZmJlYjhi
MmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaApAQCAtNTIwLDggKzUyMCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBMaW5rYWJsZSA9IDB4MSwKICAgICAgICAgICAgIE5lYXIgPSAweDIsCiAgICAgICAg
ICAgICBUYWlsID0gMHg0LAorICAgICAgICAgICAgVGhyZWFkU2FmZSA9IDB4OCwKICAgICAgICAg
ICAgIExpbmthYmxlTmVhciA9IDB4MywKICAgICAgICAgICAgIExpbmthYmxlTmVhclRhaWwgPSAw
eDcsCisgICAgICAgICAgICBUaHJlYWRTYWZlTGlua2FibGVOZWFyID0gMHhiCiAgICAgICAgIH07
CiAKICAgICAgICAgQ2FsbCgpCkBAIC0xMDE4LDYgKzEwMjAsMjIgQEAgcHVibGljOgogICAgICAg
ICBidWZmZXIuc2V0Q29kZVNpemUodGFyZ2V0Q29kZVNpemUpOwogICAgIH0KIAorICAgIC8vIFRo
aXMgZnVuY3Rpb24gZ3VhcmVudGVlcyB0aGUgbmV4dCBpbnN0cnVjdGlvblNpemUgYnl0ZXMgb2Yg
aW5zdHJ1Y3Rpb25zIHdpbGwgYmUgaW4gdGhlIHNhbWUgY2FjaGUgbGluZS4KKyAgICB2b2lkIGVu
c3VyZUNhY2hlTGluZVNwYWNlKHNpemVfdCBpbnN0cnVjdGlvblNpemUpCisgICAgeworICAgICAg
ICAvLyBGSVhNRTogcmVwbGFjZSA2NCB3aXRoIHRoZSByZWFsIGNhY2hlbGluZSBzaXplIG9uY2Ug
d2Ugc3dpdGNoIHRvIEMrKzE3LgorICAgICAgICBjb25zdCBzaXplX3QgY2FjaGVMaW5lU2l6ZSA9
IDY0OworICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplIDw9IGNhY2hlTGluZVNpemUpOwor
ICAgICAgICBzaXplX3QgY29kZVNpemUgPSBtX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworICAgICAg
ICBhdXRvIGNhY2hlQWxpZ25lZEJlZm9yZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxjYWNo
ZUxpbmVTaXplPihjb2RlU2l6ZSk7CisgICAgICAgIGF1dG8gY2FjaGVBbGlnbmVkQWZ0ZXIgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8Y2FjaGVMaW5lU2l6ZT4oY29kZVNpemUgKyBpbnN0cnVj
dGlvblNpemUpOworICAgICAgICBpZiAoY2FjaGVBbGlnbmVkQmVmb3JlID09IGNhY2hlQWxpZ25l
ZEFmdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCBudW1iZXJPZk5v
cHMgPSBjYWNoZUFsaWduZWRCZWZvcmUgLSBjb2RlU2l6ZTsKKyAgICAgICAgZW1pdE5vcHMobnVt
YmVyT2ZOb3BzKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyKCkKICAgICAgICAgOiBtX3JhbmRvbVNvdXJjZSgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKaW5kZXggYTExNWVjM2Q2NDFkNWRhNWE0OWU5
NGRlODdkM2RlN2ZmYWZkYzU4ZS4uODU3ZDBhOWFkZDMwMzk4NTFhYjNkNzNiNTRhMmZmNGY4Yzk3
YzdhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9j
YXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlv
bi5oCkBAIC0xMjUsNiArMTI1LDE3IEBAIHByaXZhdGU6CiAgICAgTmVhckNhbGxNb2RlIG1fY2Fs
bE1vZGUgPSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI7CiB9OwogCisKKy8vIFRoaXMgY2xhc3MgaXMg
anVzdCBhIHdyYXBwZXIgdGhhdCBmb3JjZXMgdXMgdG8gY2FsbCB0aGUgdGhyZWFkIHNhZmUgcGF0
Y2hpbmcgZnVuY3Rpb25zLgorY2xhc3MgQ29kZUxvY2F0aW9uVGhyZWFkU2FmZU5lYXJDYWxsIHsK
K3B1YmxpYzoKKyAgICBDb2RlTG9jYXRpb25UaHJlYWRTYWZlTmVhckNhbGwoQ29kZUxvY2F0aW9u
TmVhckNhbGwmJiBjYWxsKQorICAgICAgICA6IG5lYXJDYWxsKHN0ZDo6Zm9yd2FyZDxDb2RlTG9j
YXRpb25OZWFyQ2FsbD4oY2FsbCkpCisgICAgeworICAgIH0KKyAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbCBuZWFyQ2FsbDsKK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVi
bGljIENvZGVMb2NhdGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIoKSB7fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCmluZGV4IGRjZjgwN2VmMzRkMGNkODhkMjQ3NzBi
YzkxN2UzNDRhMmU1MGQ3NTMuLjhlYzBlYWQyZjI1N2YyZTQ0ZGEwZDljMzE0NzZmMjMzZDcyMWNk
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKQEAgLTI4NDQsNiArMjg0NCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwoKSwgQ2FsbDo6TGlua2FibGVOZWFy
KTsKICAgICB9CiAKKyAgICBDYWxsIHRocmVhZFNhZmVOZWFyQ2FsbCgpCisgICAgeworICAgICAg
ICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OlRocmVhZFNhZmVMaW5rYWJs
ZU5lYXIpOworICAgIH0KKwogICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKICAgICB7
CiAgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwodGFyZ2V0KSwgQ2FsbDo6Tm9u
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2XzY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2XzY0LmgKaW5kZXggNmU3YWQ1ZThkN2RkNzU1Njg2YTQ1YWM5NmYwMmNiMWFlNDU5
OTY0YS4uNjlhNWE2ZTQ0NjhkNGU4N2I0ZTc2NmQyNGNhY2QzY2MyZTkyODQzMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaApAQCAtMjQ3LDYgKzI0NywxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBDYWxsOjpm
cm9tVGFpbEp1bXAobmV3SnVtcCk7CiAgICAgfQogCisgICAgQ2FsbCB0aHJlYWRTYWZlUGF0Y2hh
YmxlTmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgLy8gVGVjaG5pY2FsbHksIHdlIG9ubHkgbmVl
ZCB0aGUgaW50MzIgcGFydCBvZiB0aGUgbmVhciBjYWxsIGluIHRoZSBjYWNoZSBsaW5lIGJ1dCB0
aGlzIGlzIHNpbXBsZXIuCisgICAgICAgIGNvbnN0IHNpemVfdCBzaXplT2ZOZWFyQ2FsbCA9IHNp
emVvZihpbnQzMl90KSArIDE7CisgICAgICAgIGVuc3VyZUNhY2hlTGluZVNwYWNlKHNpemVPZk5l
YXJDYWxsKTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsID0gRGF0YUxhYmVsUHRyKHRoaXMp
OworICAgICAgICBDYWxsIHJlc3VsdCA9IG5lYXJDYWxsKCk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQobGFiZWwsIGRpZmZlcmVuY2VCZXR3ZWVuKGxhYmVsLCByZXN1bHQpID09IHNpemVPZk5lYXJD
YWxsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFk
ZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJl
c3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwg
c2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAxODllNzk1YjY3MDJj
Y2JmYWU1NDQ5MWRhNGQzOTcwMTJhYmViYjNhLi45YjVjY2FjMGJiOWM2MWQxNjExNzczNzJhZGI5
YmViZTBmNmJkZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2lu
Y2x1ZGUgIldhc21Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklubGluZXMuaCIK
KyNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3Qu
aCIKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTkxLDcgKzMx
OTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RX
YXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSogZQogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gZnVuY3Rpb25Db3VudCArIDIpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBSZWY8
V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6UGxhbih2bSwgc3RhdGljX2Nh
c3Q8dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBXYXNtOjpQ
bGFuOjpGdWxsQ29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBSZWY8
V2FzbTo6QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6QkJRUGxhbih2bSwgc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBX
YXNtOjpCQlFQbGFuOjpGdWxsQ29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsK
ICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAg
IFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdl
dCgpKTsKICAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCmluZGV4IDYzMjJlNzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEzZGE1YzQx
OTUxNjQuLmMxNzVhZTBjNDgyZWQyN2JkNWY2YmRjODc5NjhlNzVkNDVhZjUwZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNp
bmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRz
LmgiCiAjaW5jbHVkZSA8dGhyZWFkPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0Myw2ICsxNDQs
OSBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIG1fdm0tPnNldExhc3RTdGFj
a1RvcCh0aHJlYWREYXRhLnNhdmVkTGFzdFN0YWNrVG9wKCkpOwogCiAgICAgbV92bS0+aGVhcC5t
YWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgogCiAg
ICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDA2ZDBmMGQ4ZDAwMzM2NmJlYjc2MDkzZGI3ZjFi
M2Q3OGVmZmQyNWYuLmQ2NzI0YzVhN2NkNmMwYjM1N2M0OTk3YjNhZTI5ZjU1ZDVkYjNmMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQzNCw3ICs0MzQsMTIg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwg
ZmFpbFRvQ29tcGlsZVdlYkFzc2VtYmx5Q29kZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIG5v
IFdhc206OlBsYW4gd2lsbCBzdWNlc3NmdWxseSBjb21waWxlIGEgZnVuY3Rpb24uIikgXAogICAg
IHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3JtYWwsICJM
aW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBzaG91bGQg
YXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAotICAgIHYodW5zaWdu
ZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNzZW1ibHkg
bW9kdWxlcy4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25M
ZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2Vt
Ymx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1h
bCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29t
cGlsYXRpb25zLiIpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVy
VXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBh
IGZ1bmN0aW9uIHRvIE9NRy4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVj
cmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMg
ZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKKyAgICB2KHVuc2lnbmVkLCB3
ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQg
dGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50
cnkuIikgXAogICAgIFwKICAgICAvKiBGSVhNRTogZW5hYmxlIGZhc3QgbWVtb3JpZXMgb24gaU9T
IGFuZCBwcmUtYWxsb2NhdGUgdGhlbS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDc3NCAqLyBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnks
ICFpc0lPUygpLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQg
YWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20g
bWVtb3J5LiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAppbmRleCBjNmQ0ODAwYzJhNWE5NjY4NDUzYWJlOGI4YTY0NDRlMjg5YjNjODhh
Li42YTJmYzZkZDRiNTU4NTM2YTQyYWEzZTZhMWFjZTA2ZDBiOGQ5OWQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC01Nyw2ICs1
Nyw3IEBACiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtRnVu
Y3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9N
R1BsYW4uaCIKICNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiV2FzbVRo
dW5rcy5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTE3NCw3ICsxNzUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9
IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCopOwogCiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsK
QEAgLTIyOSw2ICsyMzAsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZW1pdEV4Y2Vw
dGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOwogCisgICAgQmFzaWNCbG9j
ayogZW1pdFRpZXJVcENoZWNrKEJhc2ljQmxvY2sqIGVudHJ5LCB1aW50MzJfdCBkZWNyZW1lbnRD
b3VudCk7CisKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9w
KTsKICAgICBCMzo6S2luZCBtZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApOwogICAgIEV4
cHJlc3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgdWludDMyX3Qgb2Zmc2V0KTsKQEAgLTI0MSw3ICsyNDQsNyBAQCBwcml2YXRlOgogCiAgICAg
aW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNz
aW9uVHlwZSYsIHVpbnQzMl90KTsKIAotICAgIFZhbHVlKiBtYXRlcmlhbGl6ZVdhc21Db250ZXh0
KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKKyAgICBWYWx1ZSogbWF0ZXJpYWxpemVXYXNtQ29u
dGV4dChCYXNpY0Jsb2NrKik7CiAgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJl
JiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9i
YWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2Vk
dXJlJiwgQmFzaWNCbG9jayopOwogCkBAIC0yNDksNyArMjUyLDExIEBAIHByaXZhdGU6CiAKICAg
ICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXI7CiAgICAgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIG1faW5mbzsKLSAgICBNZW1vcnlNb2RlIG1fbW9kZTsKKyAgICBjb25z
dCBNZW1vcnlNb2RlIG1fbW9kZTsKKyAgICBjb25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxh
dGlvbk1vZGU7CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4OworICAgIGNvbnN0
IFRpZXJVcENvdW50KiBtX3RpZXJVcDsKKwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxz
OwpAQCAtMjcyLDEwICsyNzksMTAgQEAgaW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50
ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnMKICAgICByZXR1
cm4gb2Zmc2V0OwogfQogCi1WYWx1ZSogQjNJUkdlbmVyYXRvcjo6bWF0ZXJpYWxpemVXYXNtQ29u
dGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQorVmFsdWUqIEIzSVJHZW5l
cmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAg
aWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIHBvaW50
ZXJUeXBlKCksIE9yaWdpbigpKTsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUo
KSwgT3JpZ2luKCkpOwogICAgICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKQEAgLTI4OCw3ICsyOTUsNyBAQCBWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6bWF0ZXJpYWxpemVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sq
IGJsb2NrKQogCiAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJz
IHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRv
IHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgogICAgIC8vIFRoaXMgcHJldmVudHMgdXMg
ZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5u
ZWQgcmVnaXN0ZXIuCi0gICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpKTsK
KyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSBmYWxzZTsKICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50
ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKQEAgLTMyNiw5ICszMzMsMTIgQEAg
dm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jaywgVmFsdWUKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2Rl
KQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxh
dGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQogICAgIDogbV9pbmZv
KGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBp
bGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwg
bV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiAgICAgLCBtX2NvbnN0
YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKQEAgLTM3MSw3ICszODEsOSBAQCBCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZQogCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUlu
UHJvbG9ndWUoJmNvbXBpbGF0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2MsIE9y
aWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAKLSAgICBtX2luc3RhbmNlVmFsdWUgPSBtYXRlcmlh
bGl6ZVdhc21Db250ZXh0KG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworICAgIG1fY3VycmVudEJs
b2NrID0gZW1pdFRpZXJVcENoZWNrKG1fY3VycmVudEJsb2NrLCBPcHRpb25zOjp3ZWJBc3NlbWJs
eUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSk7CisKKyAgICBtX2luc3RhbmNlVmFsdWUgPSBtYXRl
cmlhbGl6ZVdhc21Db250ZXh0KG1fY3VycmVudEJsb2NrKTsKIH0KIAogdm9pZCBCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlv
biYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayog
YmxvY2spCkBAIC04MTcsMjQgKzgyOSw1NiBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlw
ZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogICAg
IHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwogfQogCi1CM0lSR2VuZXJh
dG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVy
ZSkKK0Jhc2ljQmxvY2sqIEIzSVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVjayhCYXNpY0Jsb2Nr
KiBlbnRyeSwgdWludDMyX3QgZGVjcmVtZW50Q291bnQpCiB7Ci0gICAgcmV0dXJuIENvbnRyb2xE
YXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9w
cm9jLmFkZEJsb2NrKCkpOwotfQorICAgIGlmIChtX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxh
dGlvbk1vZGU6Ok9NR01vZGUpCisgICAgICAgIHJldHVybiBlbnRyeTsKIAotQjNJUkdlbmVyYXRv
cjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCi17
Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJsb2NrKCkpOworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGNvdW50RG93bkxvY2F0
aW9uID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4o
bV90aWVyVXApKTsKKyAgICBWYWx1ZSogb2xkQ291bnREb3duID0gZW50cnktPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIGNvdW50RG93bkxvY2F0
aW9uKTsKKyAgICBWYWx1ZSogbmV3Q291bnREb3duID0gZW50cnktPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBTdWIsIG9yaWdpbigpLCBvbGRDb3VudERvd24sIGNvbnN0YW50KEludDMyLCBkZWNy
ZW1lbnRDb3VudCkpOworICAgIGVudHJ5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
U3RvcmUsIG9yaWdpbigpLCBuZXdDb3VudERvd24sIGNvdW50RG93bkxvY2F0aW9uKTsKKworICAg
IFZhbHVlKiB1bmRlckZsb3dlZCA9IGVudHJ5LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWJv
dmUsIG9yaWdpbigpLCBuZXdDb3VudERvd24sIG9sZENvdW50RG93bik7CisKKyAgICB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHRpZXJVcCA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBlbnRy
eS0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCB1bmRlckZs
b3dlZCk7CisgICAgICAgIGVudHJ5LT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0aWVy
VXAsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikp
OworCisgICAgICAgIHRpZXJVcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OlZv
aWQsIG9yaWdpbigpLCBFZmZlY3RzOjpmb3JDYWxsKCksCisgICAgICAgICAgICBjb25zdGFudChw
b2ludGVyVHlwZSgpLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihydW5PTUdQbGFuRm9ySW5k
ZXgpKSwKKyAgICAgICAgICAgIG1hdGVyaWFsaXplV2FzbUNvbnRleHQodGllclVwKSwKKyAgICAg
ICAgICAgIGNvbnN0YW50KEludDMyLCBtX2Z1bmN0aW9uSW5kZXgpKTsKKworICAgICAgICB0aWVy
VXAtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51
YXRpb24pOworICAgIH0KKworICAgIHJldHVybiBjb250aW51YXRpb247CiB9CiAKIEIzSVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUp
CiB7Ci0gICAgQmFzaWNCbG9jayogYm9keSA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGJyYW5jaFRhcmdldCA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGJvZHkg
PSBlbWl0VGllclVwQ2hlY2soYnJhbmNoVGFyZ2V0LCBPcHRpb25zOjp3ZWJBc3NlbWJseUxvb3BE
ZWNyZW1lbnQoKSk7CisKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJvZHkpOwotICAgIGJvZHktPmFkZFByZWRlY2Vzc29y
KG1fY3VycmVudEJsb2NrKTsKKwogICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKLSAgICByZXR1
cm4gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxv
b3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywg
b3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJyYW5j
aFRhcmdldCk7Cit9CisKK0IzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6
OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YSht
X3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fcHJvYy5h
ZGRCbG9jaygpKTsKK30KKworQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRv
cjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1f
cHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJs
b2NrKCkpOwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKQEAgLTk3NCw5ICsxMDE4LDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCkudG9TYXZlKCkpOwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVh
ZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsKSwgZnVu
Y3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVu
Y3Rpb25JbmRleCB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKQEAgLTEwMjYsOSArMTA3MCw5IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKIAogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Cisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsKSwgZnVuY3Rp
b25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rp
b25JbmRleCB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9KTsKQEAgLTEzMTMsNyArMTM1Nyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0
ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
V2FzbUluCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7
CiAgICAgfQogCi0gICAgY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5
cG9pbnRDYWxsID0gaml0LmNhbGwoKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBv
aW50VG9XYXNtRW50cnlwb2ludENhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVn
aXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCku
Z3ByKCk7CkBAIC0xMzQyLDcgKzEzODYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigp
IC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihPcGNvZGVPcmlnaW4o
bV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGlu
Z09mZnNldCgpKSk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKK0V4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1
aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTM2Miw5ICsxNDA2LDEx
IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0CiAgICAgLy8gb3B0TGV2ZWw9MS4KICAgICBwcm9j
ZWR1cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKICAgICAKLSAgICBwcm9jZWR1cmUu
c2V0T3B0TGV2ZWwob3B0TGV2ZWwpOworICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxh
dGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6
d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCgpCisgICAgICAgIDogT3B0aW9uczo6d2Vi
QXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgY29u
dGV4dChpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIG1vZGUpOworICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZvLCBwcm9jZWR1cmUsIHJl
c3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25h
dHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2Uo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CmluZGV4IDFlYzEwMWZlMzMxOTZjNTRiMWMwM2E5ZTM0Mjc5OThkMjVmMmQyYTIuLmUwNzc3OGE2
NGU3YzdlY2Y0ZjhmMzNkZGMwMzU0MjhmZDcxYTFlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMjksOSArMjksMTEgQEAKIAogI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUg
IkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNp
bmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAog
ZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwpAQCAtNDAsNiArNDIsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTWVtb3J5SW5mb3JtYXRp
b247CiAKK2VudW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIHsKKyAgICBCQlFNb2RlLAorICAgIE9N
R01vZGUsCit9OworCiBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q0NhbGxIZWxwZXJzPiBqc0VudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEIzOjpPcGFxdWVCeXByb2R1Y3RzPiBqc0VudHJ5cG9pbnRCeXByb2R1Y3RzOwpAQCAtNDgsNyAr
NTUsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGw7CiB9OwogCi1FeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIG9wdExldmVsKTsKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25h
dHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEzMjkwZmI3YzI0OGI1MzY4YmRkZTUxZmZlMGZjYWRjMmM0OTJkZDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTAs
MCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJX
YXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCisjaW5jbHVkZSAi
V2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1
ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisj
aW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5oIgorI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5o
IgorI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CisKK0JCUVBsYW46OkJCUVBsYW4oVk0mIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKHZtLCBX
VEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRh
dGVkKQorICAgICwgbV9hc3luY1dvcmsod29yaykKK3sKK30KKworQkJRUGxhbjo6QkJRUGxhbihW
TSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKKyAgICA6IEJCUVBsYW4odm0sIG1ha2VSZWYoKm5ldyBNb2R1bGVJbmZv
cm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK3sKKyAgICBt
X3N0YXRlID0gU3RhdGU6OkluaXRpYWw7Cit9CisKK0JCUVBsYW46OkJCUVBsYW4oVk0mIHZtLCBj
b25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3Jr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNvdXJjZUxl
bmd0aCwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCisgICAg
LCBtX2FzeW5jV29yayh3b3JrKQoreworfQorCitjb25zdCBjaGFyKiBCQlFQbGFuOjpzdGF0ZVN0
cmluZyhTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBTdGF0
ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFsIjsKKyAgICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6
IHJldHVybiAiVmFsaWRhdGVkIjsKKyAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDogcmV0dXJuICJQ
cmVwYXJlZCI7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGlsZWQ6IHJldHVybiAiQ29tcGlsZWQiOwor
ICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDogcmV0dXJuICJDb21wbGV0ZWQiOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJCUVBsYW46Om1vdmVU
b1N0YXRlKFN0YXRlIHN0YXRlKQoreworICAgIEFTU0VSVChzdGF0ZSA+PSBtX3N0YXRlKTsKKyAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlICYmIHN0YXRlICE9IG1fc3RhdGUsICJtb3ZpbmcgdG8gc3Rh
dGU6ICIsIHN0YXRlU3RyaW5nKHN0YXRlKSwgIiBmcm9tIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyht
X3N0YXRlKSk7CisgICAgbV9zdGF0ZSA9IHN0YXRlOworfQorCitib29sIEJCUVBsYW46OnBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUoKQoreworICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpJbml0aWFs
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdGFy
dGluZyB2YWxpZGF0aW9uIik7CisgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CisgICAgaWYg
KHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCisgICAgICAgIHN0YXJ0
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworCisgICAgeworICAgICAgICBNb2R1bGVQYXJz
ZXIgbW9kdWxlUGFyc2VyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1h
dGlvbik7CisgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsK
KyAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgeworICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xk
TG9jayhtX2xvY2spLCBXVEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IGF1dG8mIGZ1bmN0
aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5OworICAgIGZvciAodW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXgg
PCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwg
ZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDog
IiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kKTsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgZnVuY3Rpb25Mb2NhdGlvbnNbZnVu
Y3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0
aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLmVuZCAtIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3Vy
Y2VMZW5ndGgpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIGF1dG8gdmFsaWRhdGlv
blJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghdmFs
aWRhdGlvblJlc3VsdCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGZ1bmN0aW9uU3RhcnRbaV0pKSwgIiwgIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayks
IG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBp
bmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRo
aXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkK
KyAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0
VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9kdWxlIik7CisgICAgaWYg
KG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1f
bG9jaykpOworICAgIGVsc2UKKyAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlZhbGlkYXRlZCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQkJRUGxhbjo6cHJlcGFyZSgpCit7CisgICAg
QVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlZhbGlkYXRlZCk7CisgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIlN0YXJ0aW5nIHByZXBhcmF0aW9uIik7CisKKyAgICBhdXRvIHRyeVJlc2VydmVDYXBh
Y2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogd2hh
dCkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6
ZSkpKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIkZhaWxlZCBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3Ig
Iik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzaXplKTsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKHdoYXQpOworICAgICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2sp
LCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeTsKKyAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMs
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXpl
KCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIpCisgICAgICAgIHx8ICF0cnlS
ZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25Mb2NhdGlv
bnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikK
KyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywg
ZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAg
ICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdGllclVwQ291bnRzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXpl
KCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsK
KyAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUo
KSk7CisgICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgeworICAgICAg
ICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydElu
ZGV4XTsKKyAgICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9u
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9u
SW5kZXggPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOworICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVyICIsIGltcG9ydEZ1
bmN0aW9uSW5kZXgsICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5tb2R1bGUpLCAiOiAiLCBtYWtl
U3RyaW5nKGltcG9ydC0+ZmllbGQpKTsKKyAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzLnVu
Y2hlY2tlZEFwcGVuZCh3YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgpKTsKKyAgICB9CisK
KyAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6UHJlcGFyZWQpOworfQorCisvLyBXZSBkb24ndCBoYXZl
IGEgc2VtYXBob3JlIGNsYXNzLi4uIGFuZCB0aGlzIGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhp
bmdzLgorY2xhc3MgQkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXIgeworcHVibGljOgorICAgIFRo
cmVhZENvdW50SG9sZGVyKEJCUVBsYW4mIHBsYW4pCisgICAgOiBtX3BsYW4ocGxhbikKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xvY2spOworICAgICAgICBtX3Bs
YW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKKyAgICB9CisKKyAgICB+VGhyZWFkQ291bnRI
b2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9jayk7
CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOworCisgICAgICAgIGlm
ICghbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzICYmICFtX3BsYW4uaGFzV29yaygpKQor
ICAgICAgICAgICAgbV9wbGFuLmNvbXBsZXRlKGxvY2tlcik7CisgICAgfQorCisgICAgQkJRUGxh
biYgbV9wbGFuOworfTsKKwordm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFy
ZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlvbiIpOwor
CisgICAgaWYgKCFoYXNXb3JrKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYWNlU2NvcGUg
dHJhY2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2ViQXNzZW1ibHlDb21waWxlRW5k
KTsKKyAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOworCisgICAgc2l6ZV90IGJ5
dGVzQ29tcGlsZWQgPSAwOworICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgIGlmIChlZmZvcnQgPT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49
IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlhbENvbXBpbGVMaW1pdCgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlm
IChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaGFzV29yaygpKQorICAgICAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShT
dGF0ZTo6Q29tcGlsZWQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAg
ICsrbV9jdXJyZW50SW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCB1aW50OF90KiBm
dW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4
XS5zdGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb25Mb2NhdGlv
bnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0u
c3RhcnQ7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBtX3NvdXJjZUxlbmd0aCk7
CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Cisg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkg
PT0gc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpKSk7CisKKyAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOworICAgICAgICBhdXRvIHBh
cnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlv
bkluZGV4KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkp
IHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAg
ICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBj
b21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2Ug
dGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNl
QW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJp
bmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0
ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFy
c2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICAgICAgYnl0ZXNDb21waWxlZCArPSBmdW5jdGlvbkxl
bmd0aDsKKyAgICB9Cit9CisKK3ZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQg
fHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENv
bXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkgeworICAg
ICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rp
b25JbmRleCsrKSB7CisgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBt
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNb
ZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3Vu
aXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRl
eCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSkpLAorICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBv
aW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY29udGV4
dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIobV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9u
LT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworCisgICAgICAgICAgICAgICAgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21w
aWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAg
ICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2Vt
Ymx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAg
ICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtl
ZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJl
c3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRG
dW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQg
aW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9u
IHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGVBZGRyZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRl
eCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4IC0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUo
KSktPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwu
Y2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghaXNDb21wbGV0ZSgp
KSB7CisgICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcyhsb2NrZXIpOworICAgICAgICBtb3ZlVG9T
dGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICB9Cit9CisKK3ZvaWQgQkJRUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
ICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6CisgICAgICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCk7CisgICAgICAgICAgICBpZiAoIWhhc1dvcmsoKSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChpc0NvbXBsZXRlKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICBjYXNlIFN0YXRlOjpWYWxpZGF0
ZWQ6CisgICAgICAgICAgICBwcmVwYXJlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgU3RhdGU6OlByZXBhcmVkOgorICAgICAgICAgICAgY29tcGlsZUZ1bmN0aW9ucyhlZmZv
cnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1MGM2ZmU0YmY4MDcyYjUyMWRlNjc2ZDEx
MGYzYzcxYjExNjc2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21N
b2R1bGVJbmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2Fz
bVRpZXJVcENvdW50LmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9TaGFy
ZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtJbmZv
OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKKworbmFt
ZXNwYWNlIFdhc20geworCitjbGFzcyBCQlFQbGFuIDogcHVibGljIFBsYW4geworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBQbGFuOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1
bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hv
dWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxs
IGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIEJCUVBsYW4oVk0mLCBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIEJCUVBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKKyAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVz
ZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0
aW9uL2Z1bmN0aW9uIHRlc3RzCisgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBvZiBmdW5j
dGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29uc3RydWN0
b3IuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisKKyAgICBib29sIHBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgp
OworICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCk7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29u
c3QgRnVuY3RvciYpOworCisgICAgVmVjdG9yPEV4cG9ydD4mIGV4cG9ydHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAg
ICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0czsKKyAgICB9CisKKyAgICBz
aXplX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25Db3VudCgpOworICAgIH0KKworICAgIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3JtYXRpb24oKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CisKKyAgICBCYWc8Q2Fs
bExpbmtJbmZvPiYmIHRha2VDYWxsTGlua0luZm9zKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV9jYWxsTGlua0luZm9zKTsKKyAgICB9CisKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPiYmIHRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV93YXNtVG9XYXNtRXhpdFN0dWJzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOworICAgIH0KKworICAgIFZl
Y3RvcjxUaWVyVXBDb3VudD4gdGFrZVRpZXJVcENvdW50cygpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBXVEZN
b3ZlKG1fdGllclVwQ291bnRzKTsKKyAgICB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWlu
dDhfdCB7CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJl
cGFyZWQsCisgICAgICAgIENvbXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxk
IG9ubHkgbW92ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAg
fTsKKworICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGUg
PCBTdGF0ZTo6Q29tcGlsZWQ7IH0KKyAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92
ZXJyaWRlOworICAgIGJvb2wgaGFzQmVlblByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KKyAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBoYXNCZWVuUHJlcGFyZWQoKTsgfQorCitwcml2YXRlOgorICAgIGNs
YXNzIFRocmVhZENvdW50SG9sZGVyOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRDb3VudEhvbGRl
cjsKKyAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0byBw
YXJlbnQgY2xhc3Nlcy4uLgorICAgIHVzaW5nIEJhc2U6Om1fbG9jazsKKworICAgIHZvaWQgbW92
ZVRvU3RhdGUoU3RhdGUpOworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkOyB9CisgICAgdm9pZCBjb21wbGV0ZShj
b25zdCBBYnN0cmFjdExvY2tlciYpIG92ZXJyaWRlOworCisgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOworICAgIAorICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZv
czsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1
YnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4+IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zOworICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1f
Y29tcGlsYXRpb25Db250ZXh0czsKKyAgICBWZWN0b3I8VGllclVwQ291bnQ+IG1fdGllclVwQ291
bnRzOworCisgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsczsKKyAgICBTdGF0ZSBtX3N0YXRlOworCisgICAgY29uc3QgQXN5
bmNXb3JrIG1fYXN5bmNXb3JrOworICAgIHVpbnQ4X3QgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMg
eyAwIH07CisgICAgdWludDMyX3QgbV9jdXJyZW50SW5kZXggeyAwIH07Cit9OworCisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVlMDdjM2IxYmQ1ZGFlZDhlYTgzZjk1YTZmNTg1ZmYxMTJkOTRlMmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJDYWxsZWVCaXRzLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldh
c21CQlFQbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgeworICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOworCisgICAgICAg
IFJlZjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2ludCkpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNtQ2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwor
CisgICAgICAgIFJlZjxXYXNtOjpDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigp
KSk7CisKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGpz
RW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKKyAgICB9
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5k
ZXggZTg3MGRlZjJhMTcwNGMwMjNmNjY3NWQ5ODA1YjA5MDFkZTM5ZTZjMi4uNTQzNTI5Mzg3ZmY3
OTM5YTgyMGMyZTkwNDE2NzY3YTA3MTQ3MTVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtNDU1LDcgKzQ1NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIH0KIAogICAgIC8vIFRh
aWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9m
V2FzbUVudHJ5cG9pbnQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVz
cyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uKCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNo
KTsKICAgICBqaXQuanVtcChzY3JhdGNoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZS5oCmluZGV4IDA5ODc3ZWQwMDQ5OTM0MWU2ZWU4ZmQ4MWZlYjE0MGI5ODc1M2Y2MzQuLmZlNGIw
MTYyMzM1NzM2ZjVjZGM3MTRiNWJiMGRlYWM4NDIzZTBmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKmNhbGxlZSk7CiAgICAgfQogCi0gICAgdm9pZCogZW50cnlwb2ludCgp
IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7IH0KKyAgICB2b2lkKiBlbnRyeXBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBv
aW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogCiAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRy
eXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmNwcAppbmRleCA4YmYzYWY0ZWM4MTM0OGJkMGE2YmExM2EyNDJm
NmU2MDcyNmI5NjE3Li4xZWIyZTFlYjViYmQzOWIyNzJmM2IwMDAxOGIzYmUwNmQ2ZjkxZjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzAs
NyArMzAsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtQkJRUGxh
bklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQwLDcgKzQwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0mIHZtLCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1h
dGkKICAgICAsIG1fbW9kZShtb2RlKQogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3Rl
ZFRoaXMgPSB0aGlzOwotICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbWFrZVJl
Zihtb2R1bGVJbmZvcm1hdGlvbiksIFBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNr
PFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3Rl
Y3RlZFRoaXMpXSAoVk0mLCBQbGFuJikgeworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJR
UGxhbih2bSwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxl
LCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0mLCBQbGFuJikgewogICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgp
KSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7
CkBAIC00OCwxMyArNDgsMTggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBNZW1vcnlN
b2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fY2FsbGVlcy5yZXNpemUobV9jYWxsZWVD
b3VudCAqIDIpOworICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVj
dCB0aGUgQkJRIGNvZGUuCisgICAgICAgIG1fY2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7
CisgICAgICAgIG1fb3B0aW1pemVkQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisKICAg
ICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4
LCBSZWY8V2FzbTo6Q2FsbGVlPiYmIGpzRW50cnlwb2ludENhbGxlZSwgUmVmPFdhc206OkNhbGxl
ZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgewogICAgICAgICAgICAgbV9jYWxsZWVzW2NhbGxl
ZUluZGV4XSA9IFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKTsKICAgICAgICAgICAgIG1fY2Fs
bGVlc1tjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdID0gV1RGTW92ZSh3YXNtRW50cnlwb2lu
dENhbGxlZSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9
IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAgICAgICAgbV93YXNtVG9XYXNt
Q2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOworICAgICAgICBt
X3RpZXJVcENvdW50cyA9IG1fcGxhbi0+dGFrZVRpZXJVcENvdW50cygpOwogCiAgICAgICAgIG1f
cGxhbiA9IG51bGxwdHI7CiAgICAgfSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db2RlQmxvY2suaAppbmRleCBkYjlhODkxN2JhOGUxZGE4YWNkOGYxOGUxZGQzMDg2MTY1ZTIx
ZGU2Li45NTM3ZmZhNGM0ZGFhNTRiNjQwOTgxZTRhZmNjODg3MTMzODY1Y2UxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCkBAIC0yOCw2ICsyOCw4IEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5o
IgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CkBAIC00MSw3ICs0Myw4IEBAIGNsYXNzIFZNOwogbmFtZXNw
YWNlIFdhc20gewogCiBjbGFzcyBDYWxsZWU7Ci1jbGFzcyBQbGFuOworY2xhc3MgQkJRUGxhbjsK
K2NsYXNzIE9NR1BsYW47CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBlbnVtIGNsYXNzIE1l
bW9yeU1vZGUgOiB1aW50OF90OwogICAgIApAQCAtNzksMjYgKzgyLDM4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlv
bkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9u
SW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuICptX2NhbGxl
ZXNbY2FsbGVlSW5kZXhdLmdldCgpOworICAgICAgICByZXR1cm4gKm1fanNDYWxsZWVzW2NhbGxl
ZUluZGV4XS5nZXQoKTsKICAgICB9Ci0gICAgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQor
CisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBm
dW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1
bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuICpt
X2NhbGxlZXNbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5nZXQoKTsKKyAgICAgICAgcmV0
dXJuICZtX3dhc21FbnRyeVBvaW50c1tjYWxsZWVJbmRleF07CisgICAgfQorCisgICAgVGllclVw
Q291bnQmIHRpZXJVcENvdW50KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF07CiAgICAgfQorCiAgICAgYm9v
bCBpc1NhZmVUb1J1bihNZW1vcnlNb2RlKTsKIAogICAgIH5Db2RlQmxvY2soKTsKIHByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIE9NR1BsYW47CisKICAgICBDb2RlQmxvY2soVk0mLCBNZW1vcnlN
b2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAg
ICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxl
ZXM7CisgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7CisgICAg
VmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2pzQ2FsbGVlczsKKyAgICBWZWN0b3I8dm9pZCo+IG1f
d2FzbUVudHJ5UG9pbnRzOworICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudHM7
CisgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNt
Q2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2Fz
bUV4aXRTdHViczsKLSAgICBSZWZQdHI8UGxhbj4gbV9wbGFuOworICAgIFJlZlB0cjxCQlFQbGFu
PiBtX3BsYW47CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIExvY2sgbV9sb2NrOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCA2N2Y3MDU2NWMw
MDAwYjM1Mjc1YzlmODZkNDM0YTY0YmI3NTcyMTU5Li43NjdkYjRmOTkzOTJlYjA4Mzg5ZDIwNjhi
ZTM0YjkyMzU1YmJmY2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CkBAIC0yMzMsNyArMjMzLDcgQEAgc3RydWN0IEN1c3RvbVNlY3Rpb24gewogfTsKIAogc3RydWN0
IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewotICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0
aW9uOworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbjsKICAgICBzaXplX3Qg
ZnVuY3Rpb25JbmRleDsKIH07CiAKQEAgLTI1NSwyMCArMjU1LDI0IEBAIHN0cnVjdCBXYXNtRXhp
dFN0dWJzIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbTsKIH07CiAKK3R5
cGVkZWYgdm9pZCoqIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uOworCiAvLyBXZWJBc3NlbWJs
eSBkaXJlY3QgY2FsbHMgYW5kIGNhbGxfaW5kaXJlY3QgdXNlIGluZGljZXMgaW50byAiZnVuY3Rp
b24gaW5kZXggc3BhY2UiLiBUaGlzIHNwYWNlIHN0YXJ0cyB3aXRoIGFsbCBpbXBvcnRzLCBhbmQg
dGhlbiBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zLgogLy8gQ2FsbGFibGVGdW5jdGlvbiBhbmQgRnVu
Y3Rpb25JbmRleFNwYWNlIGFyZSBvbmx5IG1lYW50IGFzIGZhc3QgbG9va3VwIHRhYmxlcyBmb3Ig
dGhlc2Ugb3Bjb2RlcywgYW5kIGRvIG5vdCBvd24gY29kZS4KIHN0cnVjdCBDYWxsYWJsZUZ1bmN0
aW9uIHsKICAgICBDYWxsYWJsZUZ1bmN0aW9uKCkgPSBkZWZhdWx0OwogCi0gICAgQ2FsbGFibGVG
dW5jdGlvbihTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdm9pZCogY29kZSA9IG51bGxw
dHIpCisgICAgQ2FsbGFibGVGdW5jdGlvbihTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwg
V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gY29kZSA9IG51bGxwdHIpCiAgICAgICAgIDogc2ln
bmF0dXJlSW5kZXgoc2lnbmF0dXJlSW5kZXgpCiAgICAgICAgICwgY29kZShjb2RlKQogICAgIHsK
ICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29k
ZSk7IH0KKwogICAgIC8vIEZJWE1FIHBhY2sgdGhlIFNpZ25hdHVyZUluZGV4IGFuZCB0aGUgY29k
ZSBwb2ludGVyIGludG8gb25lIDY0LWJpdCB2YWx1ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTUxMQogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
IHsgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggfTsKLSAgICB2b2lkKiBjb2RlIHsgbnVsbHB0ciB9
OworICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGNvZGUgeyBudWxscHRyIH07CiB9Owog
dHlwZWRlZiBWZWN0b3I8Q2FsbGFibGVGdW5jdGlvbj4gRnVuY3Rpb25JbmRleFNwYWNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41YWFjODdhY2I1NzQ3YzdmY2EyZjkzNmVjOWNmNjc4YjQzMTc4MTcxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJl
YWRzLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21NYWNoaW5l
VGhyZWFkcy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKKworCitpbmxpbmUgTWFjaGluZVRocmVhZHMmIHdhc21UaHJlYWRzKCkKK3sKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY2hpbmVUaHJlYWRzPiB0aHJlYWRzOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAg
ICAgICAgdGhyZWFkcy5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKworICAgIHJldHVybiB0aHJlYWRz
OworfQorCit2b2lkIHN0YXJ0VHJhY2tpbmdDdXJyZW50VGhyZWFkKCkKK3sKKyAgICB3YXNtVGhy
ZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKK30KKwordm9pZCByZXNldEluc3RydWN0aW9uQ2Fj
aGVPbkFsbFRocmVhZHMoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sod2FzbVRocmVh
ZHMoKS5nZXRMb2NrKCkpOworCisgICAgY29uc3QgRG91Ymx5TGlua2VkTGlzdDxNYWNoaW5lVGhy
ZWFkczo6TWFjaGluZVRocmVhZD4mIHRocmVhZHMgPSB3YXNtVGhyZWFkcygpLnRocmVhZHNMaXN0
SGVhZChsb2NrZXIpOworICAgIGZvciAoY29uc3QgYXV0byogdGhyZWFkID0gdGhyZWFkcy5oZWFk
KCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KCkpIHsKKyAgICAgICAgc2VuZE1lc3Nh
Z2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKSB7
CisgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxs
IGFscmVhZHkgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxs
IGJlIHN1cmUuCisgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7Cisg
ICAgICAgIH0pOworICAgIH0KK30KKworICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJjOGQ3YTY4M2I5NGI5
MDFlOTQ0NGVlM2RmZWNjOGQ0YWU1MWJlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Db2RlQmxvY2suaCIK
KyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20geworCit2b2lkIHN0YXJ0VHJhY2tpbmdDdXJyZW50VGhyZWFkKCk7CisKK3ZvaWQgcmVz
ZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAppbmRleCA1YzE4NzYzMmJjYmM5MDEwMDcyYTkw
YWNhZDQ4NWJhNTRlOTk2YzJlLi5kMGVlZGI0MzgyOWNjMzY0YTg3MTZhYmFhNTY1OTdkOTNiNGY4
ZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcApAQCAtMjks
NyArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21Nb2R1
bGVJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUg
Ildhc21CQlFQbGFuSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNDYsNyArNDYsNyBAQCBXYXNtOjpTaWdu
YXR1cmVJbmRleCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1
bnNpZ25lZCBmdW5jdAogICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKIH0KIAotc3Rh
dGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChQbGFuJiBw
bGFuKQorc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3Vs
dChCQlFQbGFuJiBwbGFuKQogewogICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkpOwogICAgIGlm
IChwbGFuLmZhaWxlZCgpKQpAQCAtNTgsMjAgKzU4LDIwIEBAIHN0YXRpYyBQbGFuOjpDb21wbGV0
aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2Fs
bGJhCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFZNJiB2bSwgUGxhbiYgcGxhbikgewogICAg
ICAgICBBU1NFUlQoIXBsYW4uaGFzV29yaygpKTsKLSAgICAgICAgY2FsbGJhY2stPnJ1bih2bSwg
bWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbikpOworICAgICAgICBjYWxsYmFjay0+cnVuKHZtLCBt
YWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9
KTsKIH0KIAogTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZN
JiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQogewotICAgIFJlZjxQbGFuPiBwbGFuID0g
YWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBXVEZNb3ZlKHNvdXJjZSksIFBsYW46OlZhbGlkYXRpb24s
IFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IEJCUVBsYW4odm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwg
UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICBwbGFuLT5wYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KCk7CiAgICAgcmV0dXJuIG1ha2VWYWxpZGF0aW9uUmVzdWx0KHBsYW4uZ2V0KCkpOwogfQogCiB2
b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBXVEZNb3ZlKHNvdXJjZSksIFBs
YW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykp
KSk7CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4odm0sIFdURk1v
dmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhX
VEZNb3ZlKGNhbGxiYWNrKSkpKTsKICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUo
V1RGTW92ZShwbGFuKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
aAppbmRleCAyYzE2Y2QwMjM3ZTVkMjU0YzVkZjE2YjEwODkxZjRjZmM4ZDE4MWJhLi5jZWMzMGU1
Yjg2MTczM2I1ZmQyMjVmMWVhNTE1ODhkMzVjNDkxNWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZS5oCkBAIC02Miw2ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNh
bGxiYWNrJiYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1vZHVsZSgpOworCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2tGb3IoTWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9j
a3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9CiBwcml2YXRlOgogICAgIFJl
ZjxDb2RlQmxvY2s+IGdldE9yQ3JlYXRlQ29kZUJsb2NrKFZNJiwgTWVtb3J5TW9kZSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTRm
YmFlYjhmNWZjYWFlYzVhYjRmMGQzODVmYzYxNmZjNzM2MjJkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0wLDAgKzEsMTM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNPcGFx
dWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiV2Fz
bUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldh
c21NYWNoaW5lVGhyZWFkcy5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJX
YXNtVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKKyNpbmNsdWRlIDx3dGYv
VGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworT01HUGxhbjo6T01HUGxhbihWTSYg
dm0sIFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9k
ZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKHZtLCBtYWtlUmVmKGNv
bnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkp
KSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxlKG1vZHVsZS5jb3B5UmVmKCkpCisgICAg
LCBtX2NvZGVCbG9jaygqbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX21vZGUo
bW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQoreworfQorCit2b2lk
IE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCit7CisgICAgY29uc3QgRnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5JiBsb2NhdGlvbiA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeVttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IHVpbnQ4X3QqIGZ1
bmN0aW9uU3RhcnQgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2UuZGF0YSgpICsgbG9jYXRp
b24uc3RhcnQ7CisgICAgY29uc3Qgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbG9jYXRpb24uZW5k
IC0gbG9jYXRpb24uc3RhcnQ7CisgICAgQVNTRVJUKGZ1bmN0aW9uU3RhcnQgKyBmdW5jdGlvbkxl
bmd0aCA8PSBtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2UuZW5kKCkpOworCisgICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOworCisgICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CisgICAgQ29tcGlsYXRp
b25Db250ZXh0IGNvbnRleHQ7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25h
dHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBD
b21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCk7CisKKyAgICBpZiAoVU5M
SUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgZmFpbChob2xkTG9jayht
X2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0
cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7Cisg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyKTsKKyAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAorICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2Vi
QXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSkpLAorICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CisKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNl
QW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzKTsKKworICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9k
dWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7CisgICAgICAgIFJlZjxDYWxsZWU+IGNhbGxlZSA9
IENhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCkpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmpz
VG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIo
KSkpOworICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9m
dW5jdGlvbkluZGV4XSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNb
bV9mdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoY2FsbGVlKTsKKyAgICB9CisKKyAgICBjb25zdCBD
YWxsZWUmIGNhbGxlZSA9ICptX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF07CisgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYgdW5saW5rZWQpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5s
aW5rZWQpIHsKKyAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXggPT0gbV9mdW5jdGlv
bkluZGV4KQorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGNhbGxlZS5lbnRyeXBvaW50KCkp
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZXBhdGNoQ2FsbHModW5saW5rZWRDYWxscyk7
CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUg
d2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBk
aWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAorICAgIC8vIHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVwIHNv
bWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8gY2Fs
bCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQorICAgIC8vIHRoZSB1cGRh
dGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0J3MgY2FjaGUgb2YgQScsIHdoaWNo
IHdvdWxkIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJhZG5lc3MuCisgICAgcmVzZXRJbnN0cnVjdGlv
bkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhp
cyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4K
KworICAgIG1fY29kZUJsb2NrLT5tX3dhc21FbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0g
Y2FsbGVlLmVudHJ5cG9pbnQoKTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1f
Y29kZUJsb2NrLT5tX2xvY2spOworCisgICAgICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX2Nv
ZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzKQorICAgICAgICAgICAgcmVwYXRjaENhbGxz
KHVubGlua2VkKTsKKworICAgICAgICBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVz
W21fZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpOworCisgICAgfQorCit9
CisKK3ZvaWQgcnVuT01HUGxhbkZvckluZGV4KENvbnRleHQqIGNvbnRleHQsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCit7CisgICAgVk0mIHZtID0gKmNvbnRleHQtPnZtKCk7CisKKyAgICBNZW1v
cnlNb2RlIG1vZGUgPSBjb250ZXh0LT5tZW1vcnlNb2RlKCk7CisgICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogY29kZUJsb2NrID0gY29udGV4dC0+bW9kdWxlKCktPmNvZGVCbG9jayhtb2RlKTsK
KworICAgIC8vIFdlIHVzZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSB0aWVyVXBD
b3VudCB0byByZXByZXNlbnQgd2hldGhlciBvciBub3Qgc29tZW9uZSBoYXMgYWxyZWFkeSBzdGFy
dGVkIHRoZSB0aWVyIHVwLgorICAgIGlmIChjb2RlQmxvY2stPm1fY29kZUJsb2NrLT50aWVyVXBD
b3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFydFRpZXJVcCgpKQorICAgICAgICBlbnN1cmVX
b3JrbGlzdCgpLmVucXVldWUoYWRvcHRSZWYoKm5ldyBPTUdQbGFuKHZtLCBjb250ZXh0LT5tb2R1
bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5kZXgsIGNvbnRleHQtPm1lbW9yeU1vZGUoKSwgUGxh
bjo6ZG9udEZpbmFsaXplKCkpKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjlhNmVlOTg0MjI5NTNmMmEzMDhkODQ2OWUxNmFi
ZWExOGViOTYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVk
ZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDYWxsTGlua0luZm87CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgT01H
UGxhbiA6IHB1YmxpYyBQbGFuIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gUGxhbjsKKyAg
ICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8g
dGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAg
T01HUGxhbihWTSYsIFJlZjxNb2R1bGU+LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlN
b2RlLCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fY29tcGxldGVkOyB9CisgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZm
b3J0KSBvdmVycmlkZTsKKyAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmll
bmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCisgICAgdXNpbmcgQmFz
ZTo6bV9sb2NrOworCisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9jb21wbGV0ZWQ7IH0KKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jikgb3ZlcnJpZGUgeyBtX2NvbXBsZXRlZCA9IHRydWU7IH0KKyAgICAKKyAgICBSZWY8TW9kdWxl
PiBtX21vZHVsZTsKKyAgICBSZWY8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKKyAgICBNZW1vcnlN
b2RlIG1fbW9kZTsKKyAgICBib29sIG1fY29tcGxldGVkIHsgZmFsc2UgfTsKKyAgICB1aW50MzJf
dCBtX2Z1bmN0aW9uSW5kZXg7Cit9OworCit2b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0
KiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisgICAgICAgICAgICAgICAgCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IDdiNzFjZDY4NGVkNTdiMTFmZWQ2
ZTgyNjVkZWJhZDNkZGQyZTU3OTEuLmM4ODIxNTIxMzMwNDMwOGY4OTE1N2Q4YWM5ZTAxYTU5OGVi
OTc1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTUwLDI5
MSArNTAsNDUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi1QbGFuOjpQbGFuKFZNJiB2bSwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNr
KQorUGxhbjo6UGxhbihWTSYgdm0sIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8p
KQogICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAg
ICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCi0g
ICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCi0gICAgLCBtX2FzeW5jV29yayh3b3JrKQog
ewogICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1v
dmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNv
dXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IFBsYW4o
dm0sIG1ha2VSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29y
aywgV1RGTW92ZSh0YXNrKSkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7Ci19Ci0K
LVBsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VM
ZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCitQbGFuOjpQbGFu
KFZNJiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBDb21w
bGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKG1ha2VSZWYoKm5l
dyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uo
c291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQotICAgICwgbV9zdGF0
ZShTdGF0ZTo6SW5pdGlhbCkKLSAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiAgICAgbV9jb21w
bGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ2bSwgV1RGTW92ZSh0YXNrKSkpOwog
fQogCi1jb25zdCBjaGFyKiBQbGFuOjpzdGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSkKK3ZvaWQgUGxh
bjo6cnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBzd2l0
Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFsIjsK
LSAgICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6IHJldHVybiAiVmFsaWRhdGVkIjsKLSAgICBjYXNl
IFN0YXRlOjpQcmVwYXJlZDogcmV0dXJuICJQcmVwYXJlZCI7Ci0gICAgY2FzZSBTdGF0ZTo6Q29t
cGlsZWQ6IHJldHVybiAiQ29tcGlsZWQiOwotICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDogcmV0
dXJuICJDb21wbGV0ZWQiOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQorICAgIEFTU0VSVCghaXNDb21wbGV0ZSgpICYmICFoYXNXb3JrKCkpOwogCi12b2lkIFBs
YW46Om1vdmVUb1N0YXRlKFN0YXRlIHN0YXRlKQotewotICAgIEFTU0VSVChzdGF0ZSA+PSBtX3N0
YXRlKTsKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlICYmIHN0YXRlICE9IG1fc3RhdGUsICJtb3Zp
bmcgdG8gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKHN0YXRlKSwgIiBmcm9tIHN0YXRlOiAiLCBzdGF0
ZVN0cmluZyhtX3N0YXRlKSk7Ci0gICAgbV9zdGF0ZSA9IHN0YXRlOwotfQotCi12b2lkIFBsYW46
OmZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNzYWdl
KQotewotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsaW5nIHdpdGggbWVzc2FnZTogIiwg
ZXJyb3JNZXNzYWdlKTsKLSAgICBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUoZXJyb3JNZXNzYWdl
KTsKLSAgICBjb21wbGV0ZShsb2NrZXIpOworICAgIGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxl
dGlvblRhc2tzKQorICAgICAgICB0YXNrLnNlY29uZC0+cnVuKCp0YXNrLmZpcnN0LCAqdGhpcyk7
CisgICAgbV9jb21wbGV0aW9uVGFza3MuY2xlYXIoKTsKKyAgICBtX2NvbXBsZXRlZC5ub3RpZnlB
bGwoKTsKIH0KIAogdm9pZCBQbGFuOjphZGRDb21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIGlm
IChtX3N0YXRlICE9IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgaWYgKCFpc0NvbXBsZXRlKCkpCiAg
ICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1v
dmUodGFzaykpKTsKICAgICBlbHNlCiAgICAgICAgIHRhc2stPnJ1bih2bSwgKnRoaXMpOwogfQog
Ci1ib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQotewotICAgIGlmIChtX3N0YXRl
ICE9IFN0YXRlOjpJbml0aWFsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJzdGFydGluZyB2YWxpZGF0aW9uIik7Ci0gICAgTW9ub3RvbmljVGltZSBz
dGFydFRpbWU7Ci0gICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVz
KCkpCi0gICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotCi0gICAgewot
ICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0
aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1
bGVQYXJzZXIucGFyc2UoKTsKLSAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewotICAgICAgICAg
ICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBXVEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0
IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5OwotICAgIGZvciAodW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IDA7IGZ1
bmN0aW9uSW5kZXggPCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkg
ewotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFy
dGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5k
IGVuZGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgZnVuY3Rpb25M
b2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCA9IGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLmVuZCAtIGZ1bmN0aW9uTG9j
YXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5n
dGggPD0gbV9zb3VyY2VMZW5ndGgpOwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotCi0gICAgICAgIGF1
dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSk7Ci0gICAg
ICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uU3RhcnRbaV0pKSwgIiwgIik7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGlt
ZXMoKSkKLSAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1lOjpub3coKSAt
IHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9kdWxlIik7Ci0g
ICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCi0gICAgICAgIGNvbXBsZXRlKGhvbGRM
b2NrKG1fbG9jaykpOwotICAgIGVsc2UKLSAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlZhbGlk
YXRlZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhbjo6cHJlcGFyZSgpCi17Ci0g
ICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlZhbGlkYXRlZCk7Ci0gICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlN0YXJ0aW5nIHByZXBhcmF0aW9uIik7Ci0KLSAgICBUcmFjZVNjb3BlIHRyYWNl
U2NvcGUoV2ViQXNzZW1ibHlDb21waWxlU3RhcnQsIFdlYkFzc2VtYmx5Q29tcGlsZUVuZCk7Ci0K
LSAgICBhdXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXpl
X3Qgc2l6ZSwgY29uc3QgY2hhciogd2hhdCkgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rv
ci50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkZhaWxlZCBhbGxv
Y2F0aW5nIGVub3VnaCBzcGFjZSBmb3IgIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51
bWJlcihzaXplKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdoYXQpOwotICAgICAgICAg
ICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07
Ci0KLSAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0
eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBz
dHVicyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5
IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eSht
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIFdlYkFz
c2VtYmx5IGZ1bmN0aW9ucyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21w
aWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24g
Y29udGV4dHMiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxscy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX2NvbXBp
bGF0aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewotICAgICAgICBJbXBvcnQq
IGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKLSAg
ICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uSW5kZXggPSBt
X3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOwotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVyICIsIGltcG9ydEZ1bmN0aW9uSW5k
ZXgsICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5tb2R1bGUpLCAiOiAiLCBtYWtlU3RyaW5nKGlt
cG9ydC0+ZmllbGQpKTsKLSAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFw
cGVuZCh3YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgpKTsKLSAgICB9Ci0KLSAgICBtb3Zl
VG9TdGF0ZShTdGF0ZTo6UHJlcGFyZWQpOwotfQotCi0vLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBo
b3JlIGNsYXNzLi4uIGFuZCB0aGlzIGRvZXMga2luZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgotY2xh
c3MgUGxhbjo6VGhyZWFkQ291bnRIb2xkZXIgewotcHVibGljOgotICAgIFRocmVhZENvdW50SG9s
ZGVyKFBsYW4mIHBsYW4pCi0gICAgICAgIDogbV9wbGFuKHBsYW4pCi0gICAgewotICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2NrKTsKLSAgICAgICAgbV9wbGFuLm1fbnVtYmVy
T2ZBY3RpdmVUaHJlYWRzKys7Ci0gICAgfQotCi0gICAgflRocmVhZENvdW50SG9sZGVyKCkKLSAg
ICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xvY2spOwotICAgICAgICBt
X3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKLQotICAgICAgICBpZiAoIW1fcGxhbi5t
X251bWJlck9mQWN0aXZlVGhyZWFkcyAmJiAhbV9wbGFuLmhhc1dvcmsoKSkKLSAgICAgICAgICAg
IG1fcGxhbi5jb21wbGV0ZShsb2NrZXIpOwotICAgIH0KLQotICAgIFBsYW4mIG1fcGxhbjsKLX07
Ci0KLXZvaWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
Ci17Ci0gICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKLSAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKLQotICAgIGlmICghaGFzV29y
aygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRo
aXMpOwotCi0gICAgc2l6ZV90IGJ5dGVzQ29tcGlsZWQgPSAwOwotICAgIGNvbnN0IGF1dG8mIGZ1
bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChlZmZvcnQgPT0gUGFydGlh
bCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlhbENvbXBpbGVM
aW1pdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXg7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9u
cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaGFzV29yaygpKQotICAgICAgICAgICAg
ICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGlsZWQpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXggPSBtX2N1cnJl
bnRJbmRleDsKLSAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxv
Y2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVu
Z3RoID0gZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2Nh
dGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0
aCA8PSBtX3NvdXJjZUxlbmd0aCk7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBm
dW5jdGlvbkluZGV4OwotICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQo
dmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJl
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7Ci0KLSAgICAgICAgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PigpOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGls
ZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rp
b25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgT3B0aW9uczo6d2Vi
QXNzZW1ibHlCM09wdGltaXphdGlvbkxldmVsKCkpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewotICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwotICAgICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkgewotICAgICAg
ICAgICAgICAgIC8vIE11bHRpcGxlIGNvbXBpbGVzIGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHku
IFdlIGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QuCi0gICAgICAgICAgICAgICAgZmFpbChs
b2NrZXIsIG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1
bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJ
WE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
Y3VycmVudEluZGV4ID0gZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotICAgICAgICBieXRl
c0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOwotICAgIH0KLX0KLQotdm9pZCBQbGFuOjpjb21w
bGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0gU3Rh
dGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4ID49IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOwotICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJTdGFydGluZyBDb21wbGV0aW9uIik7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29t
cGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rp
b25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5z
aXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XTsKLSAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
KTsKLSAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6
Q29tcGlsYXRpb24+KAotICAgICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCAoIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNt
RW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4
dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rp
b25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBv
aW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1Rv
V2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oCi0gICAgICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
ICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbklu
ZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRl
eHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVu
bGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGlu
c3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBi
ZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRy
ZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQo
Y2FsbC5mdW5jdGlvbkluZGV4IC0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSktPndhc21F
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1dGFibGVBZGRyZXNzKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKSB7
Ci0gICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOwotICAgICAgICBmb3IgKGF1
dG8mIHRhc2sgOiBtX2NvbXBsZXRpb25UYXNrcykKLSAgICAgICAgICAgIHRhc2suc2Vjb25kLT5y
dW4oKnRhc2suZmlyc3QsICp0aGlzKTsKLSAgICAgICAgbV9jb21wbGV0aW9uVGFza3MuY2xlYXIo
KTsKLSAgICAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7Ci0gICAgfQotfQotCiB2b2lkIFBs
YW46OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OwotICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpDb21wbGV0ZWQpIHsKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBoYXZlIGEgd2FpdCBjb25kaXRpb25hbGx5IHNvIHdlIGRvbid0IGhhdmUg
dG8gaG9sZCB0aGUgbG9jayB0byBjb21wbGV0ZSAvIGZhaWwuCisgICAgaWYgKCFpc0NvbXBsZXRl
KCkpIHsKICAgICAgICAgbV9jb21wbGV0ZWQud2FpdChtX2xvY2spOwogICAgIH0KIH0KQEAgLTM1
MywxMyArMTA3LDEzIEBAIGJvb2wgUGxhbjo6dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QoVk0m
IHZtKQogICAgIGlmICghcmVtb3ZlZEFueVRhc2tzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgaWYgKGlzQ29tcGxl
dGUoKSkgewogICAgICAgICAvLyBXZSB0cml2aWFsbHkgY2FuY2VsIGFueXRoaW5nIHRoYXQncyBj
b21wbGV0ZWQuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChtX2NvbXBs
ZXRpb25UYXNrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jdXJyZW50SW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgIGlmICht
X2NvbXBsZXRpb25UYXNrcy5zaXplKCkgPT0gMSkgeworICAgICAgICBBU1NFUlQoIW1fY29tcGxl
dGlvblRhc2tzWzBdLmZpcnN0KTsKICAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkgUGxhbiB3YXMgY2FuY2VsbGVkLiBJZiB5b3Ugc2VlIHRoaXMgZXJyb3IgbWVz
c2FnZSBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmchIikpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNjcsNiArMTIxLDEzIEBAIGJvb2wgUGxhbjo6dHJ5UmVt
b3ZlVk1BbmRDYW5jZWxJZkxhc3QoVk0mIHZtKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9p
ZCBQbGFuOjpmYWlsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFN0cmluZyYmIGVycm9y
TWVzc2FnZSkKK3sKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZmFpbGluZyB3aXRoIG1lc3Nh
Z2U6ICIsIGVycm9yTWVzc2FnZSk7CisgICAgbV9lcnJvck1lc3NhZ2UgPSBXVEZNb3ZlKGVycm9y
TWVzc2FnZSk7CisgICAgY29tcGxldGUobG9ja2VyKTsKK30KKwogUGxhbjo6flBsYW4oKSB7IH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oCmluZGV4IGI2YmVmMDZkOWUzOWY2ZjdiOTA1N2Q3MTE4ZWU4YzRlYmI2ZTRlMjEuLmQ0
NWVkMWZkNjgyMmU0MTNhZWJlNjkxNTExYmZiN2YxYTgwMTM0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uaApAQCAtNDksMTA5ICs0OSw0OCBAQCBwdWJsaWM6CiAgICAgdHlw
ZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSYsIFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0aW9u
VGFzayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwogICAgIHN0YXRpYyBDb21w
bGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxi
YWNrVHlwZT4oW10oVk0mLCBQbGFuJikgeyB9KTsgfQotICAgIGVudW0gQXN5bmNXb3JrIDogdWlu
dDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07Ci0gICAgLy8gTm90ZTogQ29tcGxldGlv
blRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0
aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIFBsYW4oVk0mLCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0
aW9uVGFzayYmKTsKKyAgICBQbGFuKFZNJiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxl
dGlvblRhc2smJik7CisKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5
IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2
YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCi0gICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBv
ZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29u
c3RydWN0b3IuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgflBsYW4oKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CisgICAgdmlydHVhbCBKU19FWFBPUlRf
UFJJVkFURSB+UGxhbigpOwogCiAgICAgLy8gSWYgeW91IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcg
aGVyZSwgeW91IGNhbiByZWx5IG9uIEZJRk8gb2YgdGhlCiAgICAgLy8gY29tcGxldGlvbiB0YXNr
cyBiZWluZyBjYWxsZWQuCiAgICAgdm9pZCBhZGRDb21wbGV0aW9uVGFzayhWTSYsIENvbXBsZXRp
b25UYXNrJiYpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7Ci0KLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmUoKTsKLSAgICBlbnVtIENvbXBpbGF0aW9uRWZm
b3J0IHsgQWxsLCBQYXJ0aWFsIH07Ci0gICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0ID0gQWxsKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAg
dm9pZCBpbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJik7Ci0KLSAgICBWZWN0b3I8RXhw
b3J0PiYgZXhwb3J0cygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFp
bGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9u
LT5leHBvcnRzOwotICAgIH0KLQotICAgIHNpemVfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3Jr
KCkpOwotICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlv
bkNvdW50KCk7Ci0gICAgfQotCi0gICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1
bGVJbmZvcm1hdGlvbigpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkg
JiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRp
b24pOwotICAgIH0KLQotICAgIEJhZzxDYWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3Mo
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkp
OwotICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOwotICAgIH0KLQotICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+JiYgdGFrZVdhc21Ub1dhc21FeGl0U3R1YnMo
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkp
OwotICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOwotICAgIH0K
LQogICAgIHZvaWQgc2V0TW9kZShNZW1vcnlNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQog
ICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCi0gICAgZW51
bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBJbml0aWFsLAotICAgICAgICBWYWxp
ZGF0ZWQsCi0gICAgICAgIFByZXBhcmVkLAotICAgICAgICBDb21waWxlZCwKLSAgICAgICAgQ29t
cGxldGVkIC8vIFdlIHNob3VsZCBvbmx5IG1vdmUgdG8gQ29tcGxldGVkIGlmIHdlIGFyZSBob2xk
aW5nIHRoZSBsb2NrLgotICAgIH07Ci0KICAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CiAKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JNZXNzYWdlKCkuaXNOdWxsKCk7
IH0KLSAgICBib29sIGhhc1dvcmsoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OkNv
bXBpbGVkOyB9Ci0gICAgYm9vbCBoYXNCZWVuUHJlcGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID49IFN0YXRlOjpQcmVwYXJlZDsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNXb3JrKCkgY29u
c3QgPSAwOworICAgIGVudW0gQ29tcGlsYXRpb25FZmZvcnQgeyBBbGwsIFBhcnRpYWwgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd29yayhDb21waWxhdGlvbkVmZm9ydCA9IEFsbCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3QgPSAwOwogCiAgICAgdm9pZCB3YWl0Rm9y
Q29tcGxldGlvbigpOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjYW5jZWxsZWQgdGhlIHBs
YW4uCiAgICAgYm9vbCB0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYpOwogCi1wcml2YXRl
OgotICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOwotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRD
b3VudEhvbGRlcjsKLQotICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsK
LQotICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVu
Q29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAgICAgdm9pZCBmYWlsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsKIAotICAgIGNvbnN0
IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21wbGV0ZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImKSA9IDA7CiAKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRp
b247Ci0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwotICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKLSAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnM7Ci0gICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRl
eHRzOwogCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxWTSosIENvbXBsZXRpb25UYXNrPiwgMT4gbV9j
b21wbGV0aW9uVGFza3M7CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+PiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291
cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKICAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7CiAgICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZyB9OwogICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbXBsZXRlZDsKLSAg
ICBTdGF0ZSBtX3N0YXRlOwotICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKLSAgICB1
aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OwotICAgIHVpbnQzMl90IG1fY3Vy
cmVudEluZGV4IHsgMCB9OwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuSW5saW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzA5YWUyYjk2
NjAwOTNhOWJlYjcwZDFiZDFkOGM0NTEzNDY1ODAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
SW5saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQ2FsbGVlQml0cy5oIgotI2luY2x1ZGUgIldhc21D
YWxsZWUuaCIKLSNpbmNsdWRlICJXYXNtUGxhbi5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoIWZh
aWxlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGlu
dGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytp
bnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1
bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5n
ZXQoKTsKLQotICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBX
YXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQp
KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1Rv
V2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShqc0VudHJ5cG9pbnRD
YWxsZWUucHRyKCkpKTsKLQotICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2lu
dENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRy
eXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlv
bi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlw
b2ludENhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25J
bmRleCwgV1RGTW92ZShqc0VudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50
Q2FsbGVlKSk7Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQotCi0jZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGllclVwQ291bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTc3ZDg5NTI2NDY0MDE4ZTE4NTZkOWU0YTg0
ZDkzZDY5MTRlZWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKyAgICAv
LyBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIHRpZXIgdXAgY291bnRzIGZvciBXYXNtIGJpbmFyaWVz
LiBUaGUgbWFpbiBpbnRlcmVzdGluZyB0aGluZyBhYm91dAorICAgIC8vIHdhc20gdGllcmluZyB1
cCBjb3VudHMgaXMgdGhhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluZGljYXRlcyBpZiB0
aGUgdGllciB1cCBoYXMgYWxyZWFkeQorICAgIC8vIHN0YXJ0ZWQuIEFsc28sIHdhc20gY29kZSBk
b2VzIG5vdCBhdG9taWNhbGx5IHVwZGF0ZSB0aGlzIGNvdW50LiBUaGlzIGlzIGJlY2F1c2Ugd2UK
KyAgICAvLyBkb24ndCBjYXJlIHRvbyBtdWNoIGlmIHRoZSBjb3VudGRvd24gaXMgc2xpZ2h0bHkg
b2ZmLiBUaGUgdGllciB1cCB0cmlnZ2VyIGlzIGF0b21pYywgaG93ZXZlciwKKyAgICAvLyBzbyB0
aWVyIHVwIHdpbGwgYmUgdHJpZ2dlcmVkIGV4YWN0bHkgb25jZS4KKyAgICBjbGFzcyBUaWVyVXBD
b3VudCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpZXJVcENvdW50KTsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRpZXJVcENvdW50KCkKKyAgICAgICAgICAgIDogbV9jb3VudChPcHRp
b25zOjp3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50KCkgKiAyKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBUaWVyVXBDb3VudChUaWVyVXBDb3VudCYmIG90aGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb3VudCA9PSBPcHRpb25zOjp3ZWJBc3NlbWJs
eU9NR1RpZXJVcENvdW50KCkgKiAyKTsKKyAgICAgICAgICAgIG1fY291bnQgPSBvdGhlci5tX2Nv
dW50OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHVpbnQzMl90IGxvb3BEZWNyZW1lbnQo
KSB7IHJldHVybiBPcHRpb25zOjp3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQoKSAqIDI7IH0KKyAg
ICAgICAgc3RhdGljIHVpbnQzMl90IGZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSB7IHJldHVybiBP
cHRpb25zOjp3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSAqIDI7IH0KKworICAg
ICAgICBib29sIHNob3VsZFN0YXJ0VGllclVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoV1RGOjphdG9taWNFeGNoYW5nZU9yKCZtX2NvdW50LCAxKSAmIDEpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50MzJfdCBtX2NvdW50OworICAgIH07CisgICAg
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXgg
NWZhZGZjYjEzNTcwOTA5MzIyZmE4NzlmNWI3NmQ0Njk5YmU5YzNkOC4uNzZhODdhYzFiNDczNmYz
Y2YzN2MzNTM5ZGJjOTYxZjY3ODZhMDEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCkBAIC03NCwxMCArNzQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAg
ICAgICAgIGVsZW1lbnQgPSBxdWV1ZS5wZWVrKCk7CiAgICAgICAgICAgICAvLyBPbmx5IG9uZSB0
aHJlYWQgc2hvdWxkIHZhbGlkYXRlL3ByZXBhcmUuCi0gICAgICAgICAgICBpZiAoIXF1ZXVlLnBl
ZWsoKS5wbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgeworICAgICAgICAgICAgaWYgKCFxdWV1ZS5w
ZWVrKCkucGxhbi0+bXVsdGlUaHJlYWRlZCgpKQogICAgICAgICAgICAgICAgIHF1ZXVlLmRlcXVl
dWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKLSAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGVsZW1lbnQucGxhbi0+aGFzV29yaygpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwpAQCAtMTAwLDEzICs5OCwxMiBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAgICAgUGxhbiogcGxhbiA9IGVsZW1lbnQucGxhbi5nZXQoKTsKICAg
ICAgICAgQVNTRVJUKHBsYW4pOwotICAgICAgICBpZiAoIXBsYW4tPmhhc0JlZW5QcmVwYXJlZCgp
KSB7Ci0gICAgICAgICAgICBwbGFuLT5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7Ci0gICAgICAg
ICAgICBpZiAoIXBsYW4tPmhhc1dvcmsoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGUoaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBwbGFuLT5wcmVwYXJlKCk7CiAKKyAgICAgICAgYm9vbCB3YXNNdWx0aVRocmVhZGVkID0gcGxh
bi0+bXVsdGlUaHJlYWRlZCgpOworICAgICAgICBwbGFuLT53b3JrKFBsYW46OlBhcnRpYWwpOwor
CisgICAgICAgIEFTU0VSVCghcGxhbi0+aGFzV29yaygpIHx8IHBsYW4tPm11bHRpVGhyZWFkZWQo
KSk7CisgICAgICAgIGlmIChwbGFuLT5oYXNXb3JrKCkgJiYgIXdhc011bHRpVGhyZWFkZWQgJiYg
cGxhbi0+bXVsdGlUaHJlYWRlZCgpKSB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigq
d29ya2xpc3QubV9sb2NrKTsKICAgICAgICAgICAgIGVsZW1lbnQuc2V0VG9OZXh0UHJpb3JpdHko
KTsKICAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUuZW5xdWV1ZShXVEZNb3ZlKGVsZW1lbnQp
KTsKQEAgLTExNCw3ICsxMTEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gY29t
cGxldGUobG9ja2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIHBsYW4tPmNvbXBpbGVGdW5jdGlv
bnMoUGxhbjo6UGFydGlhbCk7CiAgICAgICAgIHJldHVybiBjb21wbGV0ZShob2xkTG9jaygqd29y
a2xpc3QubV9sb2NrKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5oCmluZGV4IGFkNGIxMDg5OTA2ZTM2NzU0OTM3YjY5OWJiZGY4YmRjZTU0ZDI5MGIu
LjZiNjkzNTJhYTc1YzliNWM4YzIzYmYxZjE0OWMzZGFlZmJhMTZlYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC01NywxMyArNTcsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7CiAgICAg
dm9pZCBkZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7CiAKLXByaXZhdGU6
Ci0gICAgY2xhc3MgVGhyZWFkOwotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7Ci0KLSAgICB0eXBl
ZGVmIHVpbnQ2NF90IFRpY2tldDsKLSAgICBUaWNrZXQgbmV4dFRpY2tldCgpIHsgcmV0dXJuIG1f
bGFzdEdyYW50ZWRUaWNrZXQrKzsgfQotCiAgICAgZW51bSBjbGFzcyBQcmlvcml0eSB7CiAgICAg
ICAgIFNodXRkb3duLAogICAgICAgICBTeW5jaHJvbm91cywKQEAgLTcyLDYgKzY1LDEzIEBAIHBy
aXZhdGU6CiAgICAgfTsKICAgICBjb25zdCBjaGFyKiBwcmlvcml0eVN0cmluZyhQcmlvcml0eSk7
CiAKK3ByaXZhdGU6CisgICAgY2xhc3MgVGhyZWFkOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7
CisKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFRpY2tldDsKKyAgICBUaWNrZXQgbmV4dFRpY2tldCgp
IHsgcmV0dXJuIG1fbGFzdEdyYW50ZWRUaWNrZXQrKzsgfQorCiAgICAgc3RydWN0IFF1ZXVlRWxl
bWVudCB7CiAgICAgICAgIFByaW9yaXR5IHByaW9yaXR5OwogICAgICAgICBUaWNrZXQgdGlja2V0
OwpAQCAtODcsNyArODcsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0
eSA+IHJpZ2h0LnByaW9yaXR5OwogICAgIH0KIAotCiAgICAgQm94PExvY2s+IG1fbG9jazsKICAg
ICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKICAgICAv
LyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxvdyBidXQgdGhhdCdzIHVubGlrZWx5LiBF
dmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBpbGUgdGhpbmdzIG9mIHRoZSBzYW1lCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwCmluZGV4IGYxNDAyYTM5N2RlMGNjZDJiOTMwMmIxNDM4ODVmYzM4NzEzZGYy
NTAuLmRjMmQ2NGU5M2ZiNTZhMjg2OWFjN2E0MWM0ZTQyN2MyYzFmMjg0N2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtQmluZGlu
Zy5oIgotI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aAppbmRleCA1MWM3ZTMxZDNiZTAyMDBlNTI2MWM0ZTEzZmVkYmE0YTAzZDRiNGU2Li5kZGQ2ZTU4
NDNiZGUxYzNlMTIzNzg5NjMxNDFhMjJjNjY0NjJiNjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBAIC02OCwx
NCArNjgsMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5q
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFj
ZSk7CiAgICAgfQotICAgIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21G
dW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKTsKICAgICB9CiAKLSAgICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9y
SW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgp
CiAgICAgewotICAgICAgICByZXR1cm4gaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsK
KyAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpOwogICAgIH0K
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIodW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmNwcAppbmRleCBjODJlMzUyZjE5Y2MyYTQ0MjZkYWE0NTk3MzMw
ZDkzZWNjMmRiNTAxLi42ODNkMTY0OTlkZjQ0ZjM5MjJmYjI1Njk2NjU5YTA1MDY0NTM1YmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5jcHAKQEAgLTEyOCwxNCArMTI4LDE0IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpz
ZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwogICAgIG1fanNGdW5jdGlvbnMu
Z2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZUlu
ZGV4KCksIGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQo
KVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpOwogfQogCiB2b2lkIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlu
ZGV4IDwgbV9zaXplKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRo
aXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uKGZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVu
dHJ5cG9pbnQoKSk7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNh
bGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4
IGY3NzJkOThkMDZjNjFjMmFkMTVjYjFjYmQ4MmVlNDhiZmZjMDFiNGEuLjhhN2ExZDBiNjhlYmEx
NzZhZWE4YTViMTU3NDg4Zjg4ZjFiY2NmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0xNTcsMTAgKzE1Nyw4
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUoKTsKIH0K
IAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxl
ZSYganNFbnRyeXBvaW50LCBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4KQogewotICAgIEFTU0VSVCgmanNFbnRyeXBvaW50ICE9ICZ3YXNtRW50cnlw
b2ludCk7Ci0KICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1
bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5j
dGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCk7CiAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50cnlwb2ludCwgd2FzbUVudHJ5cG9pbnQsIHNp
Z25hdHVyZUluZGV4KTsKQEAgLTE3NSwxMSArMTczLDEwIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2lu
dCwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBX
YXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSkKICAgICAsIG1fanNFbnRyeXBvaW50KGpzRW50cnlwb2ludC5lbnRyeXBvaW50
KCkpCi0gICAgLCBtX3dhc21FbnRyeXBvaW50KHdhc21FbnRyeXBvaW50LmVudHJ5cG9pbnQoKSkK
LSAgICAsIG1fc2lnbmF0dXJlSW5kZXgoc2lnbmF0dXJlSW5kZXgpCisgICAgLCBtX3dhc21GdW5j
dGlvbihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKHNpZ25hdHVyZUluZGV4LCB3YXNtRW50cnlwb2lu
dCkpCiB7IH0KIAogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKaW5kZXggNGNiZjVkYzRlMjM5ZjM1
MGRiZGQwNTdkMzhiNmYxNjUyZTg5MGY4Mi4uM2JiYTA5M2IzMmYzNTk2ZmRkNzkwM2M0MDM1MmNm
MjA1N2IxM2Q1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaApAQCAtNDksMTYgKzQ5LDE4IEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgY29u
c3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5
cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3Jl
YXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKIAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVy
biBtX2luc3RhbmNlLmdldCgpOyB9Ci0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZUluZGV4OyB9Ci0gICAgdm9pZCogd2Fz
bUVudHJ5cG9pbnQoKSB7IHJldHVybiBtX3dhc21FbnRyeXBvaW50OyB9CisgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlv
bi5zaWduYXR1cmVJbmRleDsgfQorICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93YXNtRnVuY3Rp
b24uY29kZTsgfQorICAgIFdhc206OkNhbGxhYmxlRnVuY3Rpb24gY2FsbGFibGVGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uOyB9CisKICAgICB2b2lkKiBqc0VudHJ5cG9p
bnQoKSB7IHJldHVybiBtX2pzRW50cnlwb2ludDsgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVu
Y3Rpb24sIG1faW5zdGFuY2UpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21F
bnRyeXBvaW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24s
IG1fd2FzbUVudHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2Vt
Ymx5RnVuY3Rpb24sIG1fd2FzbUZ1bmN0aW9uKSArIFdhc206OkNhbGxhYmxlRnVuY3Rpb246Om9m
ZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNjYs
MTggKzY4LDE0IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXgp
OworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKLSAgICAvLyBXZSBjYW4gaG9sZCByYXcgcG9p
bnRlcnMgdG8gdGhlc2UgZXhlY3V0YWJsZSBhZGRyZXNzIHBvaW50ZXJzIHNpbmNlCi0gICAgLy8g
d2UgaGF2ZSBhIEdDIHJlZmVyZW5jZSB0byBvdXIgaW5zdGFuY2UsIHdoaWNoIGtlZXBzIGFsaXZl
IHRoZSBDb2RlQmxvY2ssCi0gICAgLy8gd2hpY2ggb3ducyB0aGlzIHBvaW50ZXIuCi0gICAgdm9p
ZCogbV9qc0VudHJ5cG9pbnQ7Ci0gICAgdm9pZCogbV93YXNtRW50cnlwb2ludDsKLSAgICAvLyBJ
dCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5kZXggYmVjYXVzZSB3ZSBo
YXZlIGEgcmVmZXJlbmNlCisgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IENh
bGxhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQog
ICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhhdCBl
eHBvcnRlZCB1cywgd2hpY2gKLSAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1
cmUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCi0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggbV9z
aWduYXR1cmVJbmRleDsKKyAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1cmUv
Y29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KKyAgICB2b2lkKiBtX2pzRW50cnlwb2ludDsK
KyAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIG1fd2FzbUZ1bmN0aW9uOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggMDE3MWYyZDgwMDVjMWZkN2IwMWZj
YTgwYTAyODA1YzM3YTc1ZTUwMC4uNzA1NGE4OWM1YTgyNDZhMDgyOTgzYjRhMWY2ZTQwMjVlM2E3
ZWJlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMTI1LDEwICsxMjUsMTAgQEAgdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSwKICAgICAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8g
ZnVuY3MuCiAgICAgICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgogICAgICAgICAg
ICAgICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0Vu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAg
ICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZElu
ZGV4KTsKKyAgICAgICAgICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAg
ICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAg
ICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmc6OmZyb21V
VEY4KGV4cC5maWVsZCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBv
aW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3RyaW5nOjpmcm9tVVRGOChleHAu
ZmllbGQpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUg
PSBmdW5jdGlvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk2LDgg
KzE5Niw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBl
eGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5q
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRl
eFNwYWNlKTsKLSAgICAgICAgICAgIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBv
aW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAg
ICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24gPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0
YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2ln
bmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywg
ZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtMjcwLDE0ICsyNzAsMTQgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNv
ZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVuY3Rp
b24gImZvbyIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAgICAgICAgICAvLyBXaGF0IGlm
IHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCiAgICAg
ICAgICAgICAgICAgLy8gRG9lcyAobmV3IEluc3RhbmNlKC4uLikpLmV4cG9ydHMuZm9vID09PSB0
YWJsZS5nZXQoMCk/CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTgyNQogICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBqc0VudHJ5cG9pbnRDYWxsZWUs
IHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgIHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSwgU3RyaW5nKCksIG1faW5zdGFuY2UuZ2V0KCksIGpzRW50cnlwb2ludENhbGxlZSwgd2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKIAogICAgICAgICAgICAg
ICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgdGFibGVJbmRleCwgZnVuY3Rpb24pOwogICAgICAg
ICAgICAgICAgICsrdGFibGVJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRleCA3MDg0MWYwNWQ4NTVhOGEz
MDVhNTg4ZGU1NTlkY2QzYmVkYzJiYjU5Li5kYWIyNzBmM2I5MDFiNjU5ZDIyMGU1ZjE0ODFmYWMw
YjRlODU2NTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0zOCwxMiArMzgsMTMgQEAKICNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAj
aW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVk
ZSAiV2FzbUJCUVBsYW4uaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmgiCiAKIHVzaW5nIEpTQzo6V2FzbTo6UGxhbjsKK3VzaW5nIEpTQzo6
V2FzbTo6QkJRUGxhbjsKIAogbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSopOwpAQCAtMjEx
LDcgKzIxMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAg
ICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBXYXNtOjpQbGFuIHBsYW4odm0sIGJhc2Ug
KyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpOworICAgIEJCUVBsYW4gcGxhbih2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXpl
LCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAgLy8gRklY
TUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRl
dGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcAppbmRleCAxNzExZTA0OGRjNzRmNWQzMmZkZTRhMmQ4YzQxZDM1NGQyZDcyNzRkLi5i
MjBiNTRiMzIyNzA1NWIxNzk1N2Q2MzM3YTgwZjk1MTViYjJlMjc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCkBAIC01MiwxMCArNTIsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBleAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBBcmdMaXN0KGV4ZWMpKSk7CiB9CiAKLVdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdm9pZCogd2FzbUVudHJ5cG9pbnRDb2RlKQorV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdh
c206OkNhbGxhYmxlRnVuY3Rpb24gd2FzbUZ1bmN0aW9uKQogICAgIDogQmFzZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX3dhc21FbnRyeXBvaW50Q29kZSh3YXNtRW50cnlw
b2ludENvZGUpCi0gICAgLCBtX3NpZ25hdHVyZUluZGV4KHNpZ25hdHVyZUluZGV4KQorICAgICwg
bV93YXNtRnVuY3Rpb24od2FzbUZ1bmN0aW9uKQogeyB9CiAKIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBv
cnRJbmRleCwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCkKQEAgLTYzLDcgKzYyLDcgQEAgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHModm0s
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVyIGRv
dWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwog
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2Fs
bFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlv
bkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgc2lnbmF0dXJlSW5kZXgsIGNvZGVCbG9jay0+d2FzbVRvSnNDYWxsU3R1YkZvcklt
cG9ydChpbXBvcnRJbmRleCkpOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2Fz
bTo6Q2FsbGFibGVGdW5jdGlvbihzaWduYXR1cmVJbmRleCwgY29kZUJsb2NrLT53YXNtVG9Kc0Nh
bGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSkpOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGNvZGVCbG9jayk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCmluZGV4IGU5NjM3ZDc5YWE4NTdjMGU0NWY4
ZjBlNzk2Zjk4N2E5MzQxNDYyZmUuLjlmNmQzNDZmYjNlNDcwMGUwNDk0MzRhNGRlODMxYjVlNGUy
YThjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaApAQCAtNDMsOCArNDMsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zaWdu
YXR1cmVJbmRleDsgfQotICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNt
RW50cnlwb2ludENvZGU7IH0KKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CisgICAg
V2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gIHdhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb24uY29kZTsgfQorICAgIFdhc206OkNh
bGxhYmxlRnVuY3Rpb24gY2FsbGFibGVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1
bmN0aW9uOyB9CiAgICAgSlNPYmplY3QqIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5n
ZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC01MywxNyArNTQsMTYgQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayopOwogCiBwcml2YXRlOgotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCwgdm9pZCogd2Fz
bUVudHJ5cG9pbnRDb2RlKTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbik7CiAKICAg
ICAvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIHRvIG91ciBDb2RlQmxvY2sgYmVjYXVzZSB3ZSBoYXZl
IGEgcmF3CiAgICAgLy8gcG9pbnRlciB0byBhc20gY29kZSB0aGF0IGl0IG93bnMuCiAgICAgV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRl
QmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKLSAgICB2b2lkKiBtX3dhc21FbnRyeXBvaW50
Q29kZTsKLSAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5k
ZXggYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCisgICAgLy8gSXQncyBzYWZlIHRvIGp1c3Qg
aG9sZCB0aGUgcmF3IENhbGxhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNl
CiAgICAgLy8gdG8gb3VyIENvZGVCbG9jaywgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhh
dCBleHBvcnRlZCB1cywgd2hpY2gKLSAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWdu
YXR1cmUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCi0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
bV9zaWduYXR1cmVJbmRleDsKKyAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1
cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KKyAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uIG1fd2FzbUZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKaW5k
ZXggNWIyNmIyYTUwNDYzNjJmODFjOWVhODkwODQ2ZWM2YTgzNTcyYTkzZi4uNDg3NDQ1ZmFmNGRk
MjE2M2QwYWZlYjRlNTc5ZDBlZDk1MzkzYzU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
QXRvbWljcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaApAQCAtNjMsNiArNjMsNyBA
QCBzdHJ1Y3QgQXRvbWljIHsKICAgICBBTFdBWVNfSU5MSU5FIFQgbG9hZFJlbGF4ZWQoKSBjb25z
dCB7IHJldHVybiBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc3RvcmUoVCBkZXNpcmVkLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9
IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIHsgdmFsdWUuc3RvcmUoZGVzaXJlZCwgb3JkZXIp
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHN0b3JlUmVsYXhlZChUIGRlc2lyZWQpIGNvbnN0
IHsgcmV0dXJuIHN0b3JlKGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAK
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY29tcGFyZUV4Y2hhbmdlV2VhayhUIGV4cGVjdGVkLCBU
IGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2Vx
X2NzdCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308180</attachid>
            <date>2017-04-25 18:20:38 -0700</date>
            <delta_ts>2017-04-26 16:03:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170134-20170425182037.patch</filename>
            <type>text/plain</type>
            <size>145934</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NGI2YWQ5MWEyYWU2NTBiNWU1MTkyNDgxNzc2YmJlZmZjZjcyODAzLi5iZWIyNjUxMmI2ODI3MzU3
OTdhNDk3NjQwNDBlNDk3ZDVlMjQyNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDkgQEAKKzIwMTctMDQtMjUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IEltcGxlbWVudCB0aWVyIHVwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
ZW5zdXJlQ2FjaGVMaW5lU3BhY2UpOgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24u
aDoKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uVGhyZWFkU2FmZU5lYXJDYWxsOjpDb2RlTG9j
YXRpb25UaHJlYWRTYWZlTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
dGhyZWFkU2FmZU5lYXJDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnRocmVhZFNhZmVQ
YXRjaGFibGVOZWFyQ2FsbCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
VGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNMb2NrOjpkaWRBY3F1aXJlTG9jayk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNw
cDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwLgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpt
b3ZlVG9TdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENvdW50SG9s
ZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6On5U
aHJlYWRDb3VudEhvbGRlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVG
dW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6ZXhwb3J0cyk6CisgICAgICAgIChKU0M6Oldh
c206OkJCUVBsYW46OmludGVybmFsRnVuY3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OnRha2VNb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkJC
UVBsYW46OnRha2VDYWxsTGlua0luZm9zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp0
YWtlV2FzbVRvV2FzbUNhbGxzaXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnRh
a2VUaWVyVXBDb3VudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpoYXNCZWVuUHJl
cGFyZWQpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oLgorICAgICAgICAo
SlNDOjpXYXNtOjpCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9X
YXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAg
ICAqIHdhc20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmVudHJ5
cG9pbnQpOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OnRpZXJVcENvdW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q29kZUJsb2NrOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uOjpDYWxsYWJsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q2FsbGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bik6CisgICAgICAgICogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRocmVhZHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpzdGFydFRyYWNraW5n
Q3VycmVudFRocmVhZCk6CisgICAgICAgIChKU0M6Oldhc206OnJlc2V0SW5zdHJ1Y3Rpb25DYWNo
ZU9uQWxsVGhyZWFkcyk6CisgICAgICAgICogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oLgorICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VWYWxpZGF0
aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVZhbGlkYXRpb25DYWxsYmFjayk6
CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1
bGUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb2RlQmxvY2tGb3IpOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAoSlNDOjpXYXNtOjpydW5PTUdQbGFuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2Fz
bU9NR1BsYW4uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW5JbmxpbmVzLmguCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW5Db21wbGV0
aW9uVGFza3MpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjphZGRDb21wbGV0aW9uVGFzayk6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OndhaXRGb3JDb21wbGV0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpmYWlsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6c3RhdGVT
dHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjptb3ZlVG9TdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwcmVwYXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENv
dW50SG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6VGhyZWFkQ291
bnRIb2xkZXI6On5UaHJlYWRDb3VudEhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpjb21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpleHBvcnRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6dGFrZU1vZHVsZUluZm9ybWF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZUNhbGxMaW5rSW5mb3MpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjp0YWtlV2FzbVRvV2FzbUV4aXRTdHVicyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46Omhhc1dvcmspOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjpoYXNCZWVuUHJlcGFyZWQpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
V2FzbVRpZXJVcENvdW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbklubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRp
ZXJVcENvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Omxvb3BEZWNyZW1l
bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeURlY3Jl
bWVudCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpzaG91bGRTdGFydFRpZXJV
cCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAqIHdhc20vV2Fz
bVdvcmtsaXN0Lmg6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpuZXh0VGlja2V0KToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjp3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp3YXNtVG9K
c0NhbGxTdHViRm9ySW1wb3J0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5
RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Ondhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbGFibGVGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp3YXNtRW50
cnlwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9m
ZnNldE9mV2FzbUVudHJ5cG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFs
dWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y2FsbGFibGVGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp3YXNtRW50cnlwb2ludCk6
IERlbGV0ZWQuCisKIDIwMTctMDQtMjUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMTU0NzYuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1YjNjZmI4NTMwMmI4OTBmMjA2N2QxNjVjOWQ4
N2E2ZTljY2Y4YzYuLjcyYzk3OTUyNzI5MzY4ZDRhOTI4OTkzZDY1MTc2OWZiOGYzN2Y3NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzQwLDYgKzEzNDAsOCBAQAogCQk1MkY2
QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzMEZCMzAyMUU3QTBCNkUwMDND
MTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAq
LzsgfTsKIAkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMzFFN0Ex
MTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKKwkJNTMxMUJENEExRUE1ODFF
NTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxh
bi5jcHAgKi87IH07CisJCTUzMTFCRDRCMUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENDkx
RUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi87IH07CiAJCTUzMTM3NEJEMUQ1Q0U2
NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi87
IH07CiAJCTUzMTM3NEJGMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCRTFENUNFOTUwMDBB
RjdBMEIgLyogV2FzbVBsYW4uY3BwICovOyB9OwogCQk1MzNCMTVERjFEQzdGNDYzMDA0RDUwMEEg
LyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM3NCwxMCArMTM3NiwxNSBAQAog
CQk1M0IwQkUzODFFNTYxQjI0MDBBOEZDMjkgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0IwQkUz
NzFFNTYxQjI0MDBBOEZDMjkgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAgKi87IH07
CiAJCTUzQzZGRUVGMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M2RkVFRTFFOEFERkE5
MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovOyB9OwogCQk1M0M2RkVGMTFFOEFGRTBD
MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUgLyogV2FzbU9w
Y29kZU9yaWdpbi5jcHAgKi87IH07CisJCTUzQ0E3MzA5MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNt
QkJRUGxhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovOyB9OworCQk1
M0NBNzMwQTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAv
KiBXYXNtQkJRUGxhbi5oICovOyB9OwogCQk1M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNX
YXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmgg
Ki87IH07CiAJCTUzRDQ0NERFMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0
REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgKi87IH07CiAJCTUz
RTc3N0UzMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFNzc3RTExRTkyRTI2
NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTUzRTc3N0U0
MUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTc3N0UyMUU5MkUyNjUwMDdDQkVD
NCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCAqLzsgfTsKKwkJNTNFOUUwQUIxRUFFODNERjAw
RkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcCAqLzsgfTsKKwkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdh
c21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5o
ICovOyB9OworCQk1M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBRTFF
QUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi87IH07CiAJCTUzRjQwRTg1MUQ1
OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2Vj
dGlvbnMuaCAqLzsgfTsKIAkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlv
blBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyB9Owog
CQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2
IC8qIFdhc21QYXJzZXIuaCAqLzsgfTsKQEAgLTEzODYsNyArMTM5Myw3IEBACiAJCTUzRjQwRTk1
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyog
V2FzbU1vZHVsZVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyog
V2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5j
cHAgKi87IH07CiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9u
QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk1M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y4RDFGRjFF
ODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CisJCTUzRjhEMjAwMUU4
Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBX
YXNtQkJRUGxhbklubGluZXMuaCAqLzsgfTsKIAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8q
IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAw
MjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkEy
QUUzMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CiAJCTUzRkQwNEQzMUQ3QUIyNzcwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21D
YWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07CkBAIC0zODU3LDYgKzM4NjQsOCBAQAogCQk1MkY2
QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNt
V29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVdv
cmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENDgxRUE1ODFF
NTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21PTUdQbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTMxMUJENDkxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PTUdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zODk2LDEwICszOTA1LDE1IEBACiAJCTUzQjBCRTM3MUU1NjFCMjQw
MEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2Fz
bU9wY29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bj
b2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUYwMUU4QUZF
MEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJCUVBsYW4uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2Fz
bUJCUVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJCUVBsYW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0
IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1dhc21BZGRyZXNzVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUFkZHJlc3NWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Q0NDRERDFEQUYwOUEwMDBCOTI3ODQgLyog
QjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0U3NzdFMTFFOTJFMjY1MDA3Q0JF
QzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzRTc3N0UyMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3Jt
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRTlFMEE5MUVBRTgzREUw
MEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFk
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTWFjaGluZVRocmVhZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUx
IC8qIFdhc21UaWVyVXBDb3VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
YXNtVGllclVwQ291bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTEx
Qjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFC
NiAvKiBXYXNtU2VjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Fz
bVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRThBMUQ1OTAx
QkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zOTA5LDcgKzM5MjMsNyBAQAogCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyog
V2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
TW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1
QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbUJC
UVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21CQlFQ
bGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3
RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAv
KiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYzMzMsNiArNjM0Nyw5IEBACiAJCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2
IC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyog
V2FzbUIzSVJHZW5lcmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAv
KiBXYXNtQjNJUkdlbmVyYXRvci5oICovLAorCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAv
KiBXYXNtQkJRUGxhbi5jcHAgKi8sCisJCQkJNTNDQTczMDgxRUE1MzNEODAwNzYwNDlEIC8qIFdh
c21CQlFQbGFuLmggKi8sCisJCQkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQ
bGFuSW5saW5lcy5oICovLAogCQkJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmlu
ZGluZy5jcHAgKi8sCiAJCQkJQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5n
LmggKi8sCiAJCQkJNTI1QzBERDcxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwICov
LApAQCAtNjM0Nyw2ICs2MzY0LDggQEAKIAkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyog
V2FzbUZvcm1hdC5jcHAgKi8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21G
b3JtYXQuaCAqLywKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9u
UGFyc2VyLmggKi8sCisJCQkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5l
VGhyZWFkcy5jcHAgKi8sCisJCQkJNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNo
aW5lVGhyZWFkcy5oICovLAogCQkJCTc5MDA4MTM2MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9k
dWxlLmNwcCAqLywKIAkJCQk3OTAwODEzNzFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5o
ICovLAogCQkJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLywK
QEAgLTYzNTcsNiArNjM3Niw4IEBACiAJCQkJNTNFNzc3RTIxRTkyRTI2NTAwN0NCRUM0IC8qIFdh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAv
KiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYg
LyogV2FzbU1vZHVsZVBhcnNlci5oICovLAorCQkJCTUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAv
KiBXYXNtT01HUGxhbi5jcHAgKi8sCisJCQkJNTMxMUJENDkxRUE1ODFFNTAwNTI1MjgxIC8qIFdh
c21PTUdQbGFuLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdl
Q291bnQuY3BwICovLAogCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcCAqLywKIAkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5oICovLApAQCAtNjM2NiwxMiArNjM4NywxMiBAQAogCQkJCTUz
RjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0QkUx
RDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLywKLQkJCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYg
LyogV2FzbVBsYW5JbmxpbmVzLmggKi8sCiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8q
IFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNt
U2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNp
Z25hdHVyZS5oICovLAogCQkJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtz
LmNwcCAqLywKIAkJCQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICov
LAorCQkJCTUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywK
IAkJCQk1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLywKIAkJ
CQk1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi8sCiAJCQkJNTMw
RkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8sCkBAIC04OTA5LDYg
Kzg5MzAsNyBAQAogCQkJCTc5NkRBQTJCMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNDQTczMEExRUE1MzNEODAwNzYw
NDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZDMDFDMTEwNDFB
MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBp
biBIZWFkZXJzICovLApAQCAtOTI1Niw3ICs5Mjc4LDcgQEAKIAkJCQlCQzE4QzQ1QTBFMTZGNUNE
MDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4
MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUx
NzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTNGOEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTNGOEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgw
MTUxIC8qIFJlZ0V4cElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0Iy
MzUwMDdBNTMxNSAvKiBSZWdFeHBLZXkuaCBpbiBIZWFkZXJzICovLApAQCAtOTMyMywxMCArOTM0
NSwxMiBAQAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8q
IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlF
MTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1M0U5RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRU
aHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8q
IFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAx
NzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODVGNkJDMThD
NTUzRkUwMEYxMDYyNiAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzRTlFMEFGMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGM0FDNzUyMTgzRUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2REI3RTkxRDYxMjRCNTAwQ0RCRjhFIC8qIFN0YWNrRnJhbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzFFQUYyMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zp
c2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtOTM3NCw2ICs5Mzk4LDcgQEAKIAkJCQkwRkEyQzE3
QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRTM0MjIxMjFENkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MzExQkQ0QjFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVy
YXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBU
aW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEEx
RTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA3OCw2ICsx
MDEwMyw3IEBACiAJCQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjRCNENBMUU4ODlEN0IwMERCQkU4NiAvKiBCM1Zh
cmlhYmxlTGl2ZW5lc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0NB
NzMwOTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhERjUxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29u
c3RyYWluZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTgyLDYgKzEwMjA4LDcgQEAK
IAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMxMUJENEExRUE1ODFFNTAwNTI1
MjgxIC8qIFdhc21PTUdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRC
QTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQw
MDc5MTg5QjA1MTAwMDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTU3MTRCRjFDRDgwNEE0MDAwNEQyQzYgLyogQ29uc29sZU9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTEwMjY3LDYgKzEwMjk0LDcgQEAKIAkJCQkwRjNCRDFCNzFCODk2QTA3MDA1
OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzODFCOTM3
MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0U5RTBBQjFFQUU4M0RGMDBGRUUy
NTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODk4RjMx
MUIyNzY4OUYwMDgzQTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEz
MzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgKaW5kZXggMmViNDUxZDVkNDE3OTJlMjcyYWZiNDRmYWNlN2MwMmUzMGMyZDcyYy4u
NzZlZGU1OTFiZDQ1ODE4NjY5M2RiMjBkZjMzMjE3NGZiZWI4YjJjOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKQEAgLTUyMCw4ICs1MjAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgTGlua2FibGUgPSAw
eDEsCiAgICAgICAgICAgICBOZWFyID0gMHgyLAogICAgICAgICAgICAgVGFpbCA9IDB4NCwKKyAg
ICAgICAgICAgIFRocmVhZFNhZmUgPSAweDgsCiAgICAgICAgICAgICBMaW5rYWJsZU5lYXIgPSAw
eDMsCiAgICAgICAgICAgICBMaW5rYWJsZU5lYXJUYWlsID0gMHg3LAorICAgICAgICAgICAgVGhy
ZWFkU2FmZUxpbmthYmxlTmVhciA9IDB4YgogICAgICAgICB9OwogCiAgICAgICAgIENhbGwoKQpA
QCAtMTAxOCw2ICsxMDIwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgYnVmZmVyLnNldENvZGVTaXpl
KHRhcmdldENvZGVTaXplKTsKICAgICB9CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGd1YXJlbnRl
ZXMgdGhlIG5leHQgaW5zdHJ1Y3Rpb25TaXplIGJ5dGVzIG9mIGluc3RydWN0aW9ucyB3aWxsIGJl
IGluIHRoZSBzYW1lIGNhY2hlIGxpbmUuCisgICAgdm9pZCBlbnN1cmVDYWNoZUxpbmVTcGFjZShz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlcGxhY2Ug
NjQgd2l0aCB0aGUgcmVhbCBjYWNoZWxpbmUgc2l6ZSBvbmNlIHdlIHN3aXRjaCB0byBDKysxNy4K
KyAgICAgICAgY29uc3Qgc2l6ZV90IGNhY2hlTGluZVNpemUgPSA2NDsKKyAgICAgICAgQVNTRVJU
KGluc3RydWN0aW9uU2l6ZSA8PSBjYWNoZUxpbmVTaXplKTsKKyAgICAgICAgc2l6ZV90IGNvZGVT
aXplID0gbV9hc3NlbWJsZXIuY29kZVNpemUoKTsKKyAgICAgICAgYXV0byBjYWNoZUFsaWduZWRC
ZWZvcmUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8Y2FjaGVMaW5lU2l6ZT4oY29kZVNpemUp
OworICAgICAgICBhdXRvIGNhY2hlQWxpZ25lZEFmdGVyID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPGNhY2hlTGluZVNpemU+KGNvZGVTaXplICsgaW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAg
aWYgKGNhY2hlQWxpZ25lZEJlZm9yZSA9PSBjYWNoZUFsaWduZWRBZnRlcikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZOb3BzID0gY2FjaGVBbGlnbmVkQmVm
b3JlIC0gY29kZVNpemU7CisgICAgICAgIGVtaXROb3BzKG51bWJlck9mTm9wcyk7CisgICAgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9y
YW5kb21Tb3VyY2UoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVM
b2NhdGlvbi5oCmluZGV4IGExMTVlYzNkNjQxZDVkYTVhNDllOTRkZTg3ZDNkZTdmZmFmZGM1OGUu
Ljg1N2QwYTlhZGQzMDM5ODUxYWIzZDczYjU0YTJmZjRmOGM5N2M3YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApAQCAtMTI1LDYgKzEyNSwx
NyBAQCBwcml2YXRlOgogICAgIE5lYXJDYWxsTW9kZSBtX2NhbGxNb2RlID0gTmVhckNhbGxNb2Rl
OjpSZWd1bGFyOwogfTsKIAorCisvLyBUaGlzIGNsYXNzIGlzIGp1c3QgYSB3cmFwcGVyIHRoYXQg
Zm9yY2VzIHVzIHRvIGNhbGwgdGhlIHRocmVhZCBzYWZlIHBhdGNoaW5nIGZ1bmN0aW9ucy4KK2Ns
YXNzIENvZGVMb2NhdGlvblRocmVhZFNhZmVOZWFyQ2FsbCB7CitwdWJsaWM6CisgICAgQ29kZUxv
Y2F0aW9uVGhyZWFkU2FmZU5lYXJDYWxsKENvZGVMb2NhdGlvbk5lYXJDYWxsJiYgY2FsbCkKKyAg
ICAgICAgOiBuZWFyQ2FsbChzdGQ6OmZvcndhcmQ8Q29kZUxvY2F0aW9uTmVhckNhbGw+KGNhbGwp
KQorICAgIHsKKyAgICB9CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGw7Cit9Owor
CiBjbGFzcyBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21t
b24gewogcHVibGljOgogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKCkge30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAppbmRleCBkY2Y4MDdlZjM0ZDBjZDg4ZDI0NzcwYmM5MTdlMzQ0YTJlNTBkNzUzLi44
ZWMwZWFkMmYyNTdmMmU0NGRhMGQ5YzMxNDc2ZjIzM2Q3MjFjZDhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oCkBAIC0yODQ0LDYgKzI4NDQsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbCht
X2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CiAgICAgfQogCisgICAgQ2Fs
bCB0aHJlYWRTYWZlTmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3Nl
bWJsZXIuY2FsbCgpLCBDYWxsOjpUaHJlYWRTYWZlTGlua2FibGVOZWFyKTsKKyAgICB9CisKICAg
ICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewogICAgICAgICByZXR1cm4gQ2Fs
bChtX2Fzc2VtYmxlci5jYWxsKHRhcmdldCksIENhbGw6Ok5vbmUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4
IDZlN2FkNWU4ZDdkZDc1NTY4NmE0NWFjOTZmMDJjYjFhZTQ1OTk2NGEuLjMxMzE4MmU4Y2M2Njlk
OWFlY2EzMTQyNzcxYjQzZjIzZDkxM2UzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTI0Nyw2ICsyNDcs
MjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbDo6ZnJvbVRhaWxKdW1wKG5ld0p1bXAp
OwogICAgIH0KIAorICAgIENhbGwgdGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCkKKyAgICB7
CisgICAgICAgIGNvbnN0IHNpemVfdCBuZWFyQ2FsbE9wY29kZVNpemUgPSAxOworICAgICAgICBj
b25zdCBzaXplX3QgbmVhckNhbGxSZWxhdGl2ZUxvY2F0aW9uU2l6ZSA9IHNpemVvZihpbnQzMl90
KTsKKyAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIDMyLWJpdCBuZWFyIGNhbGwg
aW1tZWRpYXRlIGlzIDMyLWJpdCBhbGlnbmVkLgorICAgICAgICBzaXplX3QgY29kZVNpemUgPSBt
X2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworICAgICAgICBzaXplX3QgYWxpZ25lZFNpemUgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8bmVhckNhbGxSZWxhdGl2ZUxvY2F0aW9uU2l6ZT4oY29kZVNp
emUgKyBuZWFyQ2FsbE9wY29kZVNpemUpOworICAgICAgICBlbWl0Tm9wcyhhbGlnbmVkU2l6ZSAt
IChjb2RlU2l6ZSArIG5lYXJDYWxsT3Bjb2RlU2l6ZSkpOworICAgICAgICBEYXRhTGFiZWxQdHIg
bGFiZWwgPSBEYXRhTGFiZWxQdHIodGhpcyk7CisgICAgICAgIENhbGwgcmVzdWx0ID0gbmVhckNh
bGwoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChsYWJlbCwgZGlmZmVyZW5jZUJldHdlZW4obGFi
ZWwsIHJlc3VsdCkgPT0gKG5lYXJDYWxsT3Bjb2RlU2l6ZSArIG5lYXJDYWxsUmVsYXRpdmVMb2Nh
dGlvblNpemUpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBKdW1wIGJy
YW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0
ZUFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1f
cHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAxODllNzk1
YjY3MDJjY2JmYWU1NDQ5MWRhNGQzOTcwMTJhYmViYjNhLi45YjVjY2FjMGJiOWM2MWQxNjExNzcz
NzJhZGI5YmViZTBmNmJkZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBA
QAogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklubGlu
ZXMuaCIKKyNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtV29y
a2xpc3QuaCIKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTkx
LDcgKzMxOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSogZQogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gZnVuY3Rpb25Db3VudCArIDIpCiAgICAgICAgIENSQVNIKCk7CiAKLSAg
ICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6UGxhbih2bSwgc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBX
YXNtOjpQbGFuOjpGdWxsQ29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAg
ICBSZWY8V2FzbTo6QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6QkJRUGxhbih2
bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0
aCgpLCBXYXNtOjpCQlFQbGFuOjpGdWxsQ29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXpl
KCkpKTsKICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkp
OwogICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShw
bGFuLmdldCgpKTsKICAgICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IDYzMjJlNzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEz
ZGE1YzQxOTUxNjQuLmMxNzVhZTBjNDgyZWQyN2JkNWY2YmRjODc5NjhlNzVkNDVhZjUwZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIu
aCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVU
aHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0Myw2
ICsxNDQsOSBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIG1fdm0tPnNldExh
c3RTdGFja1RvcCh0aHJlYWREYXRhLnNhdmVkTGFzdFN0YWNrVG9wKCkpOwogCiAgICAgbV92bS0+
aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKKyNlbmRp
ZgogCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDA2ZDBmMGQ4ZDAwMzM2NmJlYjc2MDkz
ZGI3ZjFiM2Q3OGVmZmQyNWYuLmQ2NzI0YzVhN2NkNmMwYjM1N2M0OTk3YjNhZTI5ZjU1ZDVkYjNm
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQzNCw3ICs0
MzQsMTIgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYo
Ym9vbCwgZmFpbFRvQ29tcGlsZVdlYkFzc2VtYmx5Q29kZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRy
dWUsIG5vIFdhc206OlBsYW4gd2lsbCBzdWNlc3NmdWxseSBjb21waWxlIGEgZnVuY3Rpb24uIikg
XAogICAgIHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3Jt
YWwsICJMaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBz
aG91bGQgYXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAotICAgIHYo
dW5zaWduZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNz
ZW1ibHkgbW9kdWxlcy4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6
YXRpb25MZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2Vi
IEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFz
c2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCks
IE5vcm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1
bGUgY29tcGlsYXRpb25zLiIpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlP
TUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGll
ciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlM
b29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRv
d24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKKyAgICB2KHVuc2ln
bmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBh
bW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rp
b24gZW50cnkuIikgXAogICAgIFwKICAgICAvKiBGSVhNRTogZW5hYmxlIGZhc3QgbWVtb3JpZXMg
b24gaU9TIGFuZCBwcmUtYWxsb2NhdGUgdGhlbS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDc3NCAqLyBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RN
ZW1vcnksICFpc0lPUygpLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAz
Mi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNr
IHdhc20gbWVtb3J5LiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAppbmRleCBjNmQ0ODAwYzJhNWE5NjY4NDUzYWJlOGI4YTY0NDRlMjg5
YjNjODhhLi44MWEwMjcxYWI0NzdiYTVlNWZjNmVlZmUzMGI0NWIyODUxZmQyZjczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC01
Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJX
YXNtRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAi
V2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
V2FzbVRodW5rcy5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTE3NCw3ICsxNzUsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwK
ICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCopOwogCiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQz
Ml90KTsKQEAgLTIyMywxMiArMjI0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3Qq
IGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJ
UkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKIAotICAgIFZhbHVl
KiBjb25zdGFudChCMzo6VHlwZSwgdWludDY0X3QgYml0cyk7CisgICAgVmFsdWUqIGNvbnN0YW50
KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBzdGQ6Om9wdGlvbmFsPE9yaWdpbj4gPSBzdGQ6Om51
bGxvcHQpOwogICAgIHZvaWQgaW5zZXJ0Q29uc3RhbnRzKCk7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKKyAg
ICBCYXNpY0Jsb2NrKiBlbWl0VGllclVwQ2hlY2soQmFzaWNCbG9jayogZW50cnksIHVpbnQzMl90
IGRlY3JlbWVudENvdW50LCBPcmlnaW4pOworCiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAgQjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2Rl
IG1lbW9yeU9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CkBAIC0yNDEsNyArMjQ0LDcg
QEAgcHJpdmF0ZToKIAogICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRl
clBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CiAKLSAgICBWYWx1ZSogbWF0
ZXJpYWxpemVXYXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7CisgICAgVmFsdWUq
IG1hdGVyaWFsaXplV2FzbUNvbnRleHQoQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdh
c21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVz
dG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1
ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIApAQCAtMjQ5LDcgKzI1Miwx
MSBAQCBwcml2YXRlOgogCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFy
c2VyOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87Ci0gICAgTWVtb3J5TW9k
ZSBtX21vZGU7CisgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGU7CisgICAgY29uc3QgQ29tcGls
YXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlOworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rp
b25JbmRleDsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXA7CisKICAgICBQcm9jZWR1
cmUmIG1fcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBWZWN0b3I8
VmFyaWFibGUqPiBtX2xvY2FsczsKQEAgLTI3MiwxMCArMjc5LDEwIEBAIGludDMyX3QgQjNJUkdl
bmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50
MzJfdCBvZmZzCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6
Om1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9j
aykKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KEJhc2ljQmxv
Y2sqIGJsb2NrKQogewogICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihwcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpKTsKICAgICAgICAgaWYgKENDYWxsSGVscGVy
czo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJz
KCkpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCkBAIC0yODgsNyArMjk1LDcg
QEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2VkdXJl
JiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIAogICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21U
b1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dCByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVz
dG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAv
LyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNh
bGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBwb2ludGVy
VHlwZSgpLCBPcmlnaW4oKSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3Jp
Z2luKCkpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgcGF0Y2hwb2lu
dC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7CkBA
IC0zMjYsOSArMzMzLDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0
KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlCiAgICAgfSk7CiB9CiAK
LUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRp
b24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIE1lbW9yeU1vZGUgbW9kZSkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJu
YWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
IGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRp
ZXJVcCkKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2Nv
bXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVu
Y3Rpb25JbmRleCkKKyAgICAsIG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1
cmUpCiAgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzKQogICAgICwgbV9jb25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2MpCkBAIC0zNzEsNyAr
MzgxLDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKIAogICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+d2FzbUNhbGxlZU1vdmVM
b2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwogCi0gICAgbV9pbnN0
YW5jZVZhbHVlID0gbWF0ZXJpYWxpemVXYXNtQ29udGV4dChtX3Byb2MsIG1fY3VycmVudEJsb2Nr
KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGVtaXRUaWVyVXBDaGVjayhtX2N1cnJlbnRCbG9jaywg
VGllclVwQ291bnQ6OmZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgT3JpZ2luKCkpOworCisgICAg
bV9pbnN0YW5jZVZhbHVlID0gbWF0ZXJpYWxpemVXYXNtQ29udGV4dChtX2N1cnJlbnRCbG9jayk7
CiB9CiAKIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUo
Y29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1
cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQpAQCAtNDE4LDEwICs0MzAsMTAgQEAgdm9pZCBC
M0lSR2VuZXJhdG9yOjplbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2Vw
dGlvblR5cGUgdHlwZSkKICAgICB9KTsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNvbnN0
YW50KEIzOjpUeXBlIHR5cGUsIHVpbnQ2NF90IGJpdHMpCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6
Y29uc3RhbnQoQjM6OlR5cGUgdHlwZSwgdWludDY0X3QgYml0cywgc3RkOjpvcHRpb25hbDxPcmln
aW4+IG1heWJlT3JpZ2luKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudFBvb2wuZW5z
dXJlKFZhbHVlS2V5KG9wY29kZUZvckNvbnN0YW50KHR5cGUpLCB0eXBlLCBzdGF0aWNfY2FzdDxp
bnQ2NF90PihiaXRzKSksIFsmXSB7Ci0gICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX3Byb2MuYWRk
Q29uc3RhbnQob3JpZ2luKCksIHR5cGUsIGJpdHMpOworICAgICAgICBWYWx1ZSogcmVzdWx0ID0g
bV9wcm9jLmFkZENvbnN0YW50KG1heWJlT3JpZ2luID8gKm1heWJlT3JpZ2luIDogb3JpZ2luKCks
IHR5cGUsIGJpdHMpOwogICAgICAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmluc2VydFZh
bHVlKDAsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSk7CkBAIC04MTcs
MjQgKzgyOSw1OSBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9y
OjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogICAgIHJldHVybiBjb25zdGFu
dCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwogfQogCi1CM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YSBCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK0Jhc2ljQmxvY2sq
IEIzSVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVjayhCYXNpY0Jsb2NrKiBlbnRyeSwgdWludDMy
X3QgZGVjcmVtZW50Q291bnQsIE9yaWdpbiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIENvbnRyb2xE
YXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9w
cm9jLmFkZEJsb2NrKCkpOwotfQorICAgIGlmIChtX2NvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxh
dGlvbk1vZGU6Ok9NR01vZGUpCisgICAgICAgIHJldHVybiBlbnRyeTsKIAotQjNJUkdlbmVyYXRv
cjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCi17
Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJsb2NrKCkpOworICAgIEFTU0VSVChkZWNyZW1lbnRD
b3VudCAlIDIgPT0gMCk7CisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIHBhdGNocG9pbnQuCisg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICBB
U1NFUlQobV90aWVyVXApOworICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50
KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVwKSwgb3Jp
Z2luKTsKKyAgICBWYWx1ZSogb2xkQ291bnREb3duID0gZW50cnktPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBjb3VudERvd25Mb2NhdGlvbik7Cisg
ICAgVmFsdWUqIG5ld0NvdW50RG93biA9IGVudHJ5LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
U3ViLCBvcmlnaW4sIG9sZENvdW50RG93biwgY29uc3RhbnQoSW50MzIsIGRlY3JlbWVudENvdW50
LCBvcmlnaW4pKTsKKyAgICBlbnRyeS0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0
b3JlLCBvcmlnaW4sIG5ld0NvdW50RG93biwgY291bnREb3duTG9jYXRpb24pOworCisgICAgVmFs
dWUqIHVuZGVyRmxvd2VkID0gZW50cnktPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZSwg
b3JpZ2luLCBuZXdDb3VudERvd24sIG9sZENvdW50RG93bik7CisKKyAgICB7CisgICAgICAgIEJh
c2ljQmxvY2sqIHRpZXJVcCA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBlbnRyeS0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbiwgdW5kZXJGbG93ZWQpOwor
ICAgICAgICBlbnRyeS0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGllclVwLCBGcmVx
dWVuY3lDbGFzczo6UmFyZSksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAg
ICAgICB0aWVyVXAtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmln
aW4sIEVmZmVjdHM6OmZvckNhbGwoKSwKKyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBl
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHJ1bk9NR1BsYW5Gb3JJbmRleCksIG9yaWdp
biksCisgICAgICAgICAgICBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KHRpZXJVcCksCisgICAgICAg
ICAgICBjb25zdGFudChJbnQzMiwgbV9mdW5jdGlvbkluZGV4LCBvcmlnaW4pKTsKKworICAgICAg
ICB0aWVyVXAtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbiwgY29u
dGludWF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGludWF0aW9uOwogfQogCiBCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0
dXJlKQogewotICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBicmFuY2hUYXJnZXQgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBi
b2R5ID0gZW1pdFRpZXJVcENoZWNrKGJyYW5jaFRhcmdldCwgVGllclVwQ291bnQ6Omxvb3BEZWNy
ZW1lbnQoKSwgb3JpZ2luKCkpOworCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsKLSAgICBib2R5LT5hZGRQcmVk
ZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKICAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7Ci0g
ICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tU
eXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworICAgIHJldHVybiBDb250cm9sRGF0YSht
X3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9u
LCBicmFuY2hUYXJnZXQpOworfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2Vu
ZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJv
bERhdGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBt
X3Byb2MuYWRkQmxvY2soKSk7Cit9CisKK0IzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJH
ZW5lcmF0b3I6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9s
RGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6QmxvY2ssIG1fcHJv
Yy5hZGRCbG9jaygpKTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CkBAIC05NzQsOSArMTAyMSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpLnRvU2F2ZSgpKTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRl
eF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMDI2LDkgKzEwNzMsOSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50
aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbCks
IGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21U
b1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCks
IGZ1bmN0aW9uSW5kZXggfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xMDk0LDcgKzExNDEsMTAgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW8KICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVD
YXN0PGludDMyX3Q+KE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBjb2RlKSkpOwor
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAgICAgICAg
c2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIGNvZGUp
KSkpOworCiAKICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwog
ICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1f
Y3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCkBAIC0x
MTU4LDcgKzEyMDgsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzcwogICAgIGRhdGFMb2dMbigp
OwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250
ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBNZW1vcnlNb2RlIG1vZGUpCitzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9u
JiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7
CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2lu
dEpJVDsKIApAQCAtMTMxMyw3ICsxMzYzLDExIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNt
V3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgfQog
Ci0gICAgY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxs
ID0gaml0LmNhbGwoKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgfSk7CisK
IAogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3Rl
cnNUb1NwaWxsKSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIo
KTsKQEAgLTEzNDIsNyArMTM5Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4g
T3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KE9wY29kZU9yaWdpbihtX3Bh
cnNlci0+Y3VycmVudE9wY29kZSgpLCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zm
c2V0KCkpKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0
aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxh
dGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIG9wdExldmVsKQorRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1v
ZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xMzYyLDkgKzE0MTYsMTEgQEAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoQ29tcGlsYXQKICAgICAvLyBvcHRMZXZlbD0xLgogICAgIHByb2NlZHVy
ZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOwogICAgIAotICAgIHByb2NlZHVyZS5zZXRP
cHRMZXZlbChvcHRMZXZlbCk7CisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9u
TW9kZSA9PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJB
c3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3Nl
bWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQjNJUkdlbmVyYXRvciBjb250ZXh0
KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
bW9kZSk7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBm
dW5jdGlvbkluZGV4LCB0aWVyVXApOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+
IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJl
LCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsK
IApAQCAtMTM4NSw3ICsxNDQxLDggQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXQKICAgICAgICAg
cmVzdWx0LT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNh
bGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAotICAgIGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihjb21waWxhdGlvbkNvbnRleHQsICpyZXN1bHQsIHNpZ25hdHVyZSwgaW5mbywg
bW9kZSk7CisgICAgaWYgKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6OkJCUU1v
ZGUpCisgICAgICAgIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihjb21waWxhdGlvbkNvbnRleHQsICpy
ZXN1bHQsIHNpZ25hdHVyZSwgaW5mbywgbW9kZSwgZnVuY3Rpb25JbmRleCwgJnVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzKTsKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAxZWMxMDFm
ZTMzMTk2YzU0YjFjMDNhOWUzNDI3OTk4ZDI1ZjJkMmEyLi43NjIyZGJlY2RlYmQ3YzM2YmZhYzRj
ZDk4OTJjNjc3NjdjMDU2MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmgKQEAgLTI5LDkgKzI5LDExIEBACiAKICNpbmNsdWRlICJCM0NvbW1v
bi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJv
ZHVjdHMuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRp
ZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9p
ZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQwLDE1ICs0MiwxOSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKIAorZW51bSBj
bGFzcyBDb21waWxhdGlvbk1vZGUgeworICAgIEJCUU1vZGUsCisgICAgT01HTW9kZSwKK307CisK
IHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhl
bHBlcnM+IGpzRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5
cHJvZHVjdHM+IGpzRW50cnlwb2ludEJ5cHJvZHVjdHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEND
YWxsSGVscGVycz4gd2FzbUVudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpP
cGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7Ci0gICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCk7CitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41OWMxMTE4OGIwYzhmZWI2ODhmYzFkOWMwZDgzNGE0ODQxYTdkMWUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CkBAIC0wLDAgKzEsMzI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5j
bHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQmluZGluZy5oIgorI2lu
Y2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIK
KyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9y
eS5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtVGllclVw
Q291bnQuaCIKKyNpbmNsdWRlICJXYXNtVmFsaWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworCitCQlFQbGFuOjpCQlFQbGFuKFZNJiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFz
ZSh2bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OlZhbGlkYXRlZCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCit7Cit9CisKK0JCUVBsYW46OkJC
UVBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCQlFQbGFuKHZtLCBtYWtlUmVmKCpuZXcgTW9k
dWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFzaykpCit7
CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpJbml0aWFsOworfQorCitCQlFQbGFuOjpCQlFQbGFuKFZN
JiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZSh2bSwgc291cmNlLCBz
b3VyY2VMZW5ndGgsIFdURk1vdmUodGFzaykpCisgICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0aWFs
KQorICAgICwgbV9hc3luY1dvcmsod29yaykKK3sKK30KKworY29uc3QgY2hhciogQkJRUGxhbjo6
c3RhdGVTdHJpbmcoU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNh
c2UgU3RhdGU6OkluaXRpYWw6IHJldHVybiAiSW5pdGlhbCI7CisgICAgY2FzZSBTdGF0ZTo6VmFs
aWRhdGVkOiByZXR1cm4gIlZhbGlkYXRlZCI7CisgICAgY2FzZSBTdGF0ZTo6UHJlcGFyZWQ6IHJl
dHVybiAiUHJlcGFyZWQiOworICAgIGNhc2UgU3RhdGU6OkNvbXBpbGVkOiByZXR1cm4gIkNvbXBp
bGVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21wbGV0ZWQ6IHJldHVybiAiQ29tcGxldGVkIjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCQlFQbGFu
Ojptb3ZlVG9TdGF0ZShTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gbV9zdGF0
ZSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBzdGF0ZSAhPSBtX3N0YXRlLCAibW92aW5n
IHRvIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhzdGF0ZSksICIgZnJvbSBzdGF0ZTogIiwgc3RhdGVT
dHJpbmcobV9zdGF0ZSkpOworICAgIG1fc3RhdGUgPSBzdGF0ZTsKK30KKworYm9vbCBCQlFQbGFu
OjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
SW5pdGlhbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOworICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwor
ICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQorICAgICAg
ICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIHsKKyAgICAgICAgTW9k
dWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fbW9kdWxl
SW5mb3JtYXRpb24pOworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBh
cnNlKCk7CisgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgIEJhc2U6OmZh
aWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBhdXRv
JiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeTsKKyAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlv
bkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKKyAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRp
bmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7CisgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGgg
PSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9u
c1tmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9
IG1fc291cmNlTGVuZ3RoKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgg
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tm
dW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKworICAgICAgICBhdXRvIHZh
bGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBp
ZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0
PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSksICIsICIpOworICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayht
X2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rp
b24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUg
bWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRp
bWVzKCkpCisgICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkg
LSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygpLCAiIHVzIHRvIHZhbGlkYXRlIG1vZHVsZSIpOwor
CisgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlZhbGlkYXRlZCk7CisgICAgaWYgKG1fYXN5bmNXb3Jr
ID09IFZhbGlkYXRpb24pCisgICAgICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEJCUVBsYW46OnByZXBhcmUoKQoreworICAgIEFTU0VS
VChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOworCisgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkg
PSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkg
eworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6ZSk7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCh3aGF0KTsKKyAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgYnVp
bGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25M
b2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7
CisgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCAi
IFdlYkFzc2VtYmx5IHRvIEphdmFTY3JpcHQgc3R1YnMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNp
emUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJseSBjYWxscyIpCisgICAg
ICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50ZXJuYWxGdW5jdGlvbnMsIGZ1bmN0
aW9uTG9jYXRpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQorICAgICAgICB8
fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25Mb2Nh
dGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAi
IHRpZXItdXAgY291bnRzIikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7CisgICAgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7CisgICAg
bV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOwor
ICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7ICsraW1wb3J0SW5kZXgpIHsKKyAgICAgICAgSW1w
b3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07
CisgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4
ID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBvcnRGdW5jdGlv
bkluZGV4LCAiOiAiLCBtYWtlU3RyaW5nKGltcG9ydC0+bW9kdWxlKSwgIjogIiwgbWFrZVN0cmlu
ZyhpbXBvcnQtPmZpZWxkKSk7CisgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicy51bmNoZWNr
ZWRBcHBlbmQod2FzbVRvV2FzbShpbXBvcnRGdW5jdGlvbkluZGV4KSk7CisgICAgfQorCisgICAg
bW92ZVRvU3RhdGUoU3RhdGU6OlByZXBhcmVkKTsKK30KKworLy8gV2UgZG9uJ3QgaGF2ZSBhIHNl
bWFwaG9yZSBjbGFzcy4uLiBhbmQgdGhpcyBkb2VzIGtpbmRhIGludGVyZXN0aW5nIHRoaW5ncy4K
K2NsYXNzIEJCUVBsYW46OlRocmVhZENvdW50SG9sZGVyIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRD
b3VudEhvbGRlcihCQlFQbGFuJiBwbGFuKQorICAgIDogbV9wbGFuKHBsYW4pCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1f
bnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7CisgICAgfQorCisgICAgflRocmVhZENvdW50SG9sZGVy
KCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xvY2spOworICAg
ICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKKworICAgICAgICBpZiAoIW1f
cGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcyAmJiAhbV9wbGFuLmhhc1dvcmsoKSkKKyAgICAg
ICAgICAgIG1fcGxhbi5jb21wbGV0ZShsb2NrZXIpOworICAgIH0KKworICAgIEJCUVBsYW4mIG1f
cGxhbjsKK307CisKK3ZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkKTsK
KyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKKworICAg
IGlmICghaGFzV29yaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBUcmFjZVNjb3BlIHRyYWNl
U2NvcGUoV2ViQXNzZW1ibHlDb21waWxlU3RhcnQsIFdlYkFzc2VtYmx5Q29tcGlsZUVuZCk7Cisg
ICAgVGhyZWFkQ291bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsKKworICAgIHNpemVfdCBieXRlc0Nv
bXBpbGVkID0gMDsKKyAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBpZiAoZWZmb3J0ID09IFBhcnRpYWwgJiYgYnl0ZXNDb21waWxlZCA+PSBPcHRp
b25zOjp3ZWJBc3NlbWJseVBhcnRpYWxDb21waWxlTGltaXQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9j
dXJyZW50SW5kZXggPj0gZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGhhc1dvcmsoKSkKKyAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6
OkNvbXBpbGVkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmdW5jdGlvbkluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgICAgICArK21f
Y3VycmVudEluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rp
b25TdGFydCA9IG1fc291cmNlICsgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3Rh
cnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uTG9jYXRpb25zW2Z1
bmN0aW9uSW5kZXhdLmVuZCAtIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOworICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBt
X3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSkpOworCisgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0g
PSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKKyAgICAgICAgYXV0byBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBt
X3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRl
eCwgJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdKTsKKworICAgICAgICBpZiAoVU5MSUtF
TFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9lcnJvck1lc3NhZ2UpIHsKKyAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBjb3VsZCBmYWlsIHNpbXVsdGFuZW91
c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIGZh
aWwobG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAiLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAv
LyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKKyAgICAgICAg
Ynl0ZXNDb21waWxlZCArPSBmdW5jdGlvbkxlbmd0aDsKKyAgICB9Cit9CisKK3ZvaWQgQkJRUGxh
bjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKK3sKKyAgICBBU1NFUlQo
bV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKKworICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDb21waWxlZCkgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CisgICAgICAgICAgICBDb21w
aWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25J
bmRleF07CisgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAg
ICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVu
Y3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAgICAgICAgICAg
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dhc21FbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAor
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlw
dC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpKSksCisgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1
dG8mIHVubGlua2VkIDogbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscykgeworICAgICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBleGVj
dXRhYmxlQWRkcmVzczsKKyAgICAgICAgICAgICAgICBpZiAobV9tb2R1bGVJbmZvcm1hdGlvbi0+
aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5k
ZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBi
ZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhp
cyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAgICAgICAg
ICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5m
dW5jdGlvbkluZGV4KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXggLSBtX3dhc21Ub1dhc21FeGl0
U3R1YnMuc2l6ZSgpKS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVh
ckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1dGFibGVBZGRy
ZXNzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFp
c0NvbXBsZXRlKCkpIHsKKyAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBsZXRlZCk7Cisg
ICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcyhsb2NrZXIpOworICAgIH0KK30KKwordm9pZCBCQlFQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK3sKKyAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDoKKyAgICAgICAgICAgIHBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghaGFzV29yaygpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGlzQ29tcGxldGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgU3Rh
dGU6OlZhbGlkYXRlZDoKKyAgICAgICAgICAgIHByZXBhcmUoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBTdGF0ZTo6UHJlcGFyZWQ6CisgICAgICAgICAgICBjb21waWxlRnVu
Y3Rpb25zKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM3MjZjN2JjMDM0ZGZh
NWNiYTNiMDIxMjM1YzVhYmRmNDY3NDg5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQu
aCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNp
bmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
YWxsTGlua0luZm87CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEpTUHJvbWlzZURlZmVy
cmVkOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJsaWMg
UGxhbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IFBsYW47CisgICAgZW51bSBBc3luY1dv
cmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKKyAgICAvLyBOb3RlOiBD
b21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3Ro
ZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgQkJRUGxhbihWTSYs
IFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiYmLCBBc3lu
Y1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Ig
c2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1v
ZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKKyAgICAvLyBGSVhNRTogV2hlbiB3
ZSBnZXQgcmlkIG9mIGZ1bmN0aW9uIHRlc3RzIHdlIHNob3VsZCByZW1vdmUgQXN5bmNXb3JrIGZy
b20gdGhpcyBjb25zdHJ1Y3Rvci4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKFZNJiwg
Y29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKwor
ICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmVwYXJlKCk7CisgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9u
RWZmb3J0KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpbml0
aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJik7CisKKyAgICBWZWN0b3I8RXhwb3J0PiYgZXhw
b3J0cygpIGNvbnN0CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYg
IWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRz
OworICAgIH0KKworICAgIHNpemVfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAg
ICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7
CisgICAgfQorCisgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJbmZvcm1h
dGlvbigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dv
cmsoKSk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOworICAg
IH0KKworICAgIEJhZzxDYWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQorICAgIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAg
ICByZXR1cm4gV1RGTW92ZShtX2NhbGxMaW5rSW5mb3MpOworICAgIH0KKworICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY+JiYgdGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKQorICAgIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAg
ICByZXR1cm4gV1RGTW92ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOworICAgIH0KKworICAgIFZl
Y3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNtQ2FsbHNp
dGVzKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29y
aygpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyk7
CisgICAgfQorCisgICAgVmVjdG9yPFRpZXJVcENvdW50PiB0YWtlVGllclVwQ291bnRzKCkKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV90aWVyVXBDb3VudHMpOworICAgIH0KKworICAgIGVudW0g
Y2xhc3MgU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAgICAgVmFsaWRh
dGVkLAorICAgICAgICBQcmVwYXJlZCwKKyAgICAgICAgQ29tcGlsZWQsCisgICAgICAgIENvbXBs
ZXRlZCAvLyBXZSBzaG91bGQgb25seSBtb3ZlIHRvIENvbXBsZXRlZCBpZiB3ZSBhcmUgaG9sZGlu
ZyB0aGUgbG9jay4KKyAgICB9OworCisgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChtX2FzeW5jV29yayA9PSBBc3luY1dvcms6OlZhbGlkYXRpb24p
CisgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpWYWxpZGF0ZWQ7CisgICAgICAg
IHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OkNvbXBpbGVkOworICAgIH0KKyAgICB2b2lkIHdvcmso
Q29tcGlsYXRpb25FZmZvcnQpIG92ZXJyaWRlOworICAgIGJvb2wgaGFzQmVlblByZXBhcmVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KKyAgICBib29sIG11
bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBoYXNCZWVuUHJlcGFyZWQoKTsg
fQorCitwcml2YXRlOgorICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOworICAgIGZyaWVuZCBj
bGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5kc2hp
cCBkb2Vzbid0IGV4dGVuZCB0byBwYXJlbnQgY2xhc3Nlcy4uLgorICAgIHVzaW5nIEJhc2U6Om1f
bG9jazsKKworICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOworICAgIGJvb2wgaXNDb21wbGV0
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZDsg
fQorICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZTsKKwor
ICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKKyAgICAKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bUludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8
Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CisgICAgVmVjdG9yPFRp
ZXJVcENvdW50PiBtX3RpZXJVcENvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4+IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisgICAgU3RhdGUgbV9z
dGF0ZTsKKworICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAgICB1aW50OF90IG1f
bnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1fY3VycmVudEluZGV4
IHsgMCB9OworfTsKKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTA3YzNiMWJkNWRhZWQ4ZWE4M2Y5NWE2ZjU4
NWZmMTEyZDk0ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ2FsbGVlQml0cy5oIgorI2luY2x1ZGUgIldhc21D
YWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQkJRUGxhbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20geworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBCQlFQbGFu
Ojppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKK3sKKyAgICBBU1NF
UlQoIWZhaWxlZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9
IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUo
KTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKKyAgICAgICAgV2FzbUludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbklu
ZGV4XS5nZXQoKTsKKworICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5
cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9u
LT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShqc0VudHJ5
cG9pbnRDYWxsZWUucHRyKCkpKTsKKworICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50
cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndh
c21FbnRyeXBvaW50KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihm
dW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNt
RW50cnlwb2ludENhbGxlZS5wdHIoKSkpOworCisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVu
Y3Rpb25JbmRleCwgV1RGTW92ZShqc0VudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRy
eXBvaW50Q2FsbGVlKSk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IGU4NzBkZWYyYTE3MDRjMDIzZjY2NzVkOTgwNWIwOTAx
ZGUzOWU2YzIuLjU0MzUyOTM4N2ZmNzkzOWE4MjBjMmU5MDQxNjc2N2EwNzE0NzE1ZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTQ1NSw3ICs0NTUs
OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRl
eCkKICAgICB9CiAKICAgICAvLyBUYWlsIGNhbGwgaW50byB0aGUgY2FsbGVlIFdlYkFzc2VtYmx5
IGZ1bmN0aW9uLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KCkpLCBzY3JhdGNoKTsKKyAgICBq
aXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zm
c2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgc2NyYXRjaCk7CisgICAgaml0Lmxv
YWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCAwOTg3N2VkMDA0OTkzNDFlNmVlOGZkODFm
ZWIxNDBiOTg3NTNmNjM0Li5mZTRiMDE2MjMzNTczNmY1Y2RjNzE0YjViYjBkZWFjODQyM2UwZmYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpjYWxsZWUpOwogICAgIH0KIAot
ICAgIHZvaWQqIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24t
PmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCogZW50cnlwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7IH0KIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggOGJmM2Fm
NGVjODEzNDhiZDBhNmJhMTNhMjQyZjZlNjA3MjZiOTYxNy4uYmNhMDRhNGUyY2I1MzBlNDExZDAz
MmQ5ZGU2N2RhNWFmMzg4ZjljYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVCbG9jay5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbVBsYW5JbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2FzbUJCUVBsYW5JbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00MCw3ICs0MCw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpCiAgICAgLCBtX21vZGUobW9kZSkKIHsKICAgICBSZWZQ
dHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICBtX3BsYW4gPSBhZG9wdFJl
ZigqbmV3IFBsYW4odm0sIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBQbGFuOjpGdWxsQ29t
cGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZNJiwgUGxhbiYpIHsKKyAgICBtX3Bs
YW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4odm0sIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24p
LCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5
cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZNJiwg
UGxhbiYpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAg
ICBpZiAobV9wbGFuLT5mYWlsZWQoKSkgewogICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBt
X3BsYW4tPmVycm9yTWVzc2FnZSgpOwpAQCAtNDgsMTMgKzQ4LDIxIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX2Nh
bGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQgKiAyKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIHNo
b3VsZCBldmVudHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgorICAgICAgICBtX2NhbGxlZXMu
cmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICBtX2pzQ2FsbGVlcy5yZXNpemUobV9jYWxs
ZWVDb3VudCk7CisgICAgICAgIG1fb3B0aW1pemVkQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3Vu
dCk7CisgICAgICAgIG1fd2FzbUVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKwog
ICAgICAgICBtX3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIFJlZjxXYXNtOjpDYWxsZWU+JiYganNFbnRyeXBvaW50Q2FsbGVlLCBSZWY8V2FzbTo6Q2Fs
bGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICBtX2NhbGxlZXNbY2Fs
bGVlSW5kZXhdID0gV1RGTW92ZShqc0VudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICAgICAgbV9j
YWxsZWVzW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBv
aW50Q2FsbGVlKTsKKyAgICAgICAgICAgIG1fanNDYWxsZWVzW2NhbGxlZUluZGV4XSA9IFdURk1v
dmUoanNFbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRl
eF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgIG1fd2FzbUVu
dHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9p
bnQoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9w
bGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOworICAgICAgICBtX3dhc21Ub1dhc21DYWxs
c2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CisgICAgICAgIG1fdGll
clVwQ291bnRzID0gbV9wbGFuLT50YWtlVGllclVwQ291bnRzKCk7CiAKICAgICAgICAgbV9wbGFu
ID0gbnVsbHB0cjsKICAgICB9KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5oCmluZGV4IGRiOWE4OTE3YmE4ZTFkYThhY2Q4ZjE4ZTFkZDMwODYxNjVlMjFkZTYu
LmQ2NGQ3ZmFlMTA2NzA1YTc5MDk2OWFhMDc3MTU5YmE3Mzc1NTdhZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4LDggQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
KyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KQEAgLTQxLDcgKzQzLDggQEAgY2xhc3MgVk07CiBuYW1lc3BhY2Ug
V2FzbSB7CiAKIGNsYXNzIENhbGxlZTsKLWNsYXNzIFBsYW47CitjbGFzcyBCQlFQbGFuOworY2xh
c3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGVudW0gY2xhc3MgTWVtb3J5
TW9kZSA6IHVpbnQ4X3Q7CiAgICAgCkBAIC03OSwyNiArODIsNDYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tj
YWxsZWVJbmRleF0uZ2V0KCk7CisgICAgICAgIHJldHVybiAqbV9qc0NhbGxlZXNbY2FsbGVlSW5k
ZXhdLmdldCgpOwogICAgIH0KICAgICBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25J
bXBvcnRDb3VudCgpKTsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbklu
ZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIHJldHVybiAqbV9jYWxsZWVz
W2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7CisgICAgICAgIGlmIChtX29wdGlt
aXplZENhbGxlZXNbY2FsbGVlSW5kZXhdKQorICAgICAgICAgICAgcmV0dXJuICptX29wdGltaXpl
ZENhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOworICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tj
YWxsZWVJbmRleF0uZ2V0KCk7CisgICAgfQorCisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAg
ICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1w
b3J0Q291bnQoKTsKKyAgICAgICAgcmV0dXJuICZtX3dhc21FbnRyeVBvaW50c1tjYWxsZWVJbmRl
eF07CisgICAgfQorCisgICAgVGllclVwQ291bnQmIHRpZXJVcENvdW50KHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV90aWVyVXBDb3VudHNbZnVuY3Rpb25J
bmRleF07CiAgICAgfQorCiAgICAgYm9vbCBpc1NhZmVUb1J1bihNZW1vcnlNb2RlKTsKIAogICAg
IH5Db2RlQmxvY2soKTsKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE9NR1BsYW47CisKICAg
ICBDb2RlQmxvY2soVk0mLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYpOwogICAgIHVu
c2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgVmVjdG9y
PFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CisgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBt
X29wdGltaXplZENhbGxlZXM7CisgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2pzQ2FsbGVl
czsKKyAgICBWZWN0b3I8dm9pZCo+IG1fd2FzbUVudHJ5UG9pbnRzOworICAgIFZlY3RvcjxUaWVy
VXBDb3VudD4gbV90aWVyVXBDb3VudHM7CisgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKLSAgICBSZWZQdHI8UGxhbj4gbV9w
bGFuOworICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOwogICAgIExvY2sgbV9sb2NrOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaAppbmRleCA2N2Y3MDU2NWMwMDAwYjM1Mjc1YzlmODZkNDM0YTY0YmI3NTcyMTU5Li43
NjdkYjRmOTkzOTJlYjA4Mzg5ZDIwNjhiZTM0YjkyMzU1YmJmY2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yMzMsNyArMjMzLDcgQEAgc3RydWN0IEN1c3Rv
bVNlY3Rpb24gewogfTsKIAogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewotICAgIENv
ZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGNh
bGxMb2NhdGlvbjsKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleDsKIH07CiAKQEAgLTI1NSwyMCAr
MjU1LDI0IEBAIHN0cnVjdCBXYXNtRXhpdFN0dWJzIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgd2FzbVRvV2FzbTsKIH07CiAKK3R5cGVkZWYgdm9pZCoqIFdhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uOworCiAvLyBXZWJBc3NlbWJseSBkaXJlY3QgY2FsbHMgYW5kIGNhbGxfaW5kaXJlY3Qg
dXNlIGluZGljZXMgaW50byAiZnVuY3Rpb24gaW5kZXggc3BhY2UiLiBUaGlzIHNwYWNlIHN0YXJ0
cyB3aXRoIGFsbCBpbXBvcnRzLCBhbmQgdGhlbiBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zLgogLy8g
Q2FsbGFibGVGdW5jdGlvbiBhbmQgRnVuY3Rpb25JbmRleFNwYWNlIGFyZSBvbmx5IG1lYW50IGFz
IGZhc3QgbG9va3VwIHRhYmxlcyBmb3IgdGhlc2Ugb3Bjb2RlcywgYW5kIGRvIG5vdCBvd24gY29k
ZS4KIHN0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uIHsKICAgICBDYWxsYWJsZUZ1bmN0aW9uKCkgPSBk
ZWZhdWx0OwogCi0gICAgQ2FsbGFibGVGdW5jdGlvbihTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCwgdm9pZCogY29kZSA9IG51bGxwdHIpCisgICAgQ2FsbGFibGVGdW5jdGlvbihTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCwgV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gY29kZSA9
IG51bGxwdHIpCiAgICAgICAgIDogc2lnbmF0dXJlSW5kZXgoc2lnbmF0dXJlSW5kZXgpCiAgICAg
ICAgICwgY29kZShjb2RlKQogICAgIHsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSk7IH0KKwogICAgIC8vIEZJWE1FIHBhY2sgdGhlIFNp
Z25hdHVyZUluZGV4IGFuZCB0aGUgY29kZSBwb2ludGVyIGludG8gb25lIDY0LWJpdCB2YWx1ZS4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMQogICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4IHsgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggfTsKLSAg
ICB2b2lkKiBjb2RlIHsgbnVsbHB0ciB9OworICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IGNvZGUgeyBudWxscHRyIH07CiB9OwogdHlwZWRlZiBWZWN0b3I8Q2FsbGFibGVGdW5jdGlvbj4g
RnVuY3Rpb25JbmRleFNwYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1hY2hpbmVUaHJlYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWFjODdhY2I1NzQ3YzdmY2EyZjkz
NmVjOWNmNjc4YjQzMTc4MTcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworCitpbmxpbmUgTWFjaGluZVRocmVhZHMmIHdh
c21UaHJlYWRzKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY2hpbmVUaHJl
YWRzPiB0aHJlYWRzOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgdGhyZWFkcy5jb25zdHJ1Y3QoKTsKKyAgICB9
KTsKKworICAgIHJldHVybiB0aHJlYWRzOworfQorCit2b2lkIHN0YXJ0VHJhY2tpbmdDdXJyZW50
VGhyZWFkKCkKK3sKKyAgICB3YXNtVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKK30KKwor
dm9pZCByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sod2FzbVRocmVhZHMoKS5nZXRMb2NrKCkpOworCisgICAgY29uc3QgRG91
Ymx5TGlua2VkTGlzdDxNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZD4mIHRocmVhZHMgPSB3
YXNtVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChsb2NrZXIpOworICAgIGZvciAoY29uc3QgYXV0
byogdGhyZWFkID0gdGhyZWFkcy5oZWFkKCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0
KCkpIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKHNp
Z2luZm9fdCosIHVjb250ZXh0X3QqKSB7CisgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0
IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNh
Y2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCisgICAgICAgICAgICBXVEY6OmNyb3Nz
TW9kaWZ5aW5nQ29kZUZlbmNlKCk7CisgICAgICAgIH0pOworICAgIH0KK30KKworICAgIAorfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFk
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmJjOGQ3YTY4M2I5NGI5MDFlOTQ0NGVlM2RmZWNjOGQ0YWU1MWJlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFk
cy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIldhc21Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVk
ZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit2b2lkIHN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CisKK3ZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7
CisgICAgCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAppbmRl
eCA1YzE4NzYzMmJjYmM5MDEwMDcyYTkwYWNhZDQ4NWJhNTRlOTk2YzJlLi5kMGVlZGI0MzgyOWNj
MzY0YTg3MTZhYmFhNTY1OTdkOTNiNGY4ZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21Q
bGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21CQlFQbGFuSW5saW5lcy5oIgogI2luY2x1ZGUg
Ildhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAt
NDYsNyArNDYsNyBAQCBXYXNtOjpTaWduYXR1cmVJbmRleCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdAogICAgIHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKTsKIH0KIAotc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtl
VmFsaWRhdGlvblJlc3VsdChQbGFuJiBwbGFuKQorc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJl
c3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChCQlFQbGFuJiBwbGFuKQogewogICAgIEFTU0VSVCgh
cGxhbi5oYXNXb3JrKCkpOwogICAgIGlmIChwbGFuLmZhaWxlZCgpKQpAQCAtNTgsMjAgKzU4LDIw
IEBAIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1v
ZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRh
c2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFZN
JiB2bSwgUGxhbiYgcGxhbikgewogICAgICAgICBBU1NFUlQoIXBsYW4uaGFzV29yaygpKTsKLSAg
ICAgICAgY2FsbGJhY2stPnJ1bih2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbikpOworICAg
ICAgICBjYWxsYmFjay0+cnVuKHZtLCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxC
QlFQbGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAogTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0
IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQog
ewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBXVEZNb3ZlKHNv
dXJjZSksIFBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgUmVm
PEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4odm0sIFdURk1vdmUoc291cmNl
KSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICBwbGFu
LT5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CiAgICAgcmV0dXJuIG1ha2VWYWxpZGF0aW9uUmVz
dWx0KHBsYW4uZ2V0KCkpOwogfQogCiB2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhWTSYgdm0s
IFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFj
ayYmIGNhbGxiYWNrKQogewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFu
KHZtLCBXVEZNb3ZlKHNvdXJjZSksIFBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2Fs
bGJhY2soV1RGTW92ZShjYWxsYmFjaykpKSk7CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IEJCUVBsYW4odm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwg
bWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKICAgICBXYXNtOjpl
bnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAppbmRleCAyYzE2Y2QwMjM3ZTVkMjU0YzVkZjE2YjEw
ODkxZjRjZmM4ZDE4MWJhLi5jZWMzMGU1Yjg2MTczM2I1ZmQyMjVmMWVhNTE1ODhkMzVjNDkxNWNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC02Miw2ICs2Miw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENvZGVC
bG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgfk1vZHVsZSgpOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoTWVtb3J5TW9kZSBt
b2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdl
dCgpOyB9CiBwcml2YXRlOgogICAgIFJlZjxDb2RlQmxvY2s+IGdldE9yQ3JlYXRlQ29kZUJsb2Nr
KFZNJiwgTWVtb3J5TW9kZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMDgyNzRjMDRjMGE2NTczODkwNzVmZjhkY2Q0NDQ4MjY2NWE0
ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21PTUdQ
bGFuLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNt
Q29udGV4dC5oIgorI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgorI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJXYXNtV29y
a2xpc3QuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
KworT01HUGxhbjo6T01HUGxhbihWTSYgdm0sIFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisg
ICAgOiBCYXNlKHZtLCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxl
KG1vZHVsZS5jb3B5UmVmKCkpCisgICAgLCBtX2NvZGVCbG9jaygqbW9kdWxlLT5jb2RlQmxvY2tG
b3IobW9kZSkpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5j
dGlvbkluZGV4KQoreworfQorCit2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQp
Cit7CisgICAgY29uc3QgRnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5JiBsb2NhdGlvbiA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVttX2Z1bmN0aW9uSW5kZXhd
OworICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX21vZHVsZUluZm9ybWF0aW9u
LT5zb3VyY2UuZGF0YSgpICsgbG9jYXRpb24uc3RhcnQ7CisgICAgY29uc3Qgc2l6ZV90IGZ1bmN0
aW9uTGVuZ3RoID0gbG9jYXRpb24uZW5kIC0gbG9jYXRpb24uc3RhcnQ7CisgICAgQVNTRVJUKGZ1
bmN0aW9uU3RhcnQgKyBmdW5jdGlvbkxlbmd0aCA8PSBtX21vZHVsZUluZm9ybWF0aW9uLT5zb3Vy
Y2UuZW5kKCkpOworCisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9u
SW5kZXhdOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24o
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSkpOworCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlu
a2VkQ2FsbHM7CisgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgYXV0byBwYXJz
ZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rp
b25JbmRleCk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsK
KyAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJl
cihtX2Z1bmN0aW9uSW5kZXgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFbnRy
eXBvaW50IG9tZ0VudHJ5cG9pbnQ7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0
Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyIsIG1f
ZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCku
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT53YXNtRW50
cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKworICAgIHZvaWQqIGVudHJ5cG9pbnQ7Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVC
bG9ja0Zvcihtb2RlKCkpKTsKKyAgICAgICAgUmVmPENhbGxlZT4gY2FsbGVlID0gQ2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+d2FzbUNhbGxlZU1v
dmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAg
QVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0p
OworICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CisKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1l
IHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJl
IHdlCisgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlv
biBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxz
aXRlcywgd2hpY2ggdGhleQorICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlm
IHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24g
Y2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQorICAgICAgICAvLyB0aGUgbG9jayBvdXIg
Y29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9vLgorICAgICAgICBMb2NrSG9sZGVyIGhv
bGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fb3B0aW1p
emVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZShjYWxsZWUpOworCisgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkQ2FsbHMpIHsKKyAgICAgICAgICAgIGNvbnN0IENh
bGxlZSYgY2FsbGVlID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWwoY2FsbGVlLmVudHJ5cG9pbnQoKSkpOworICAgICAgICB9CisgICAgICAgIHN0ZDo6ZXhjaGFu
Z2UobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1ttX2Z1bmN0aW9uSW5kZXhdLCB1
bmxpbmtlZENhbGxzKTsKKyAgICB9CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1
cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21w
aWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAorICAgIC8vIHdoZXJl
IHdlIGFyZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBz
b21lIGZ1bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxk
IHNlZQorICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0
J3MgY2FjaGUgb2YgQScsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJhZG5lc3Mu
CisgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3Mg
Z29vZCB0byBiZSBwYXJhbm9pZC4KKworICAgIG1fY29kZUJsb2NrLT5tX3dhc21FbnRyeVBvaW50
c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworCisgICAgICAgIGF1dG8gcmVwYXRjaENh
bGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mICBjYWxsc2l0
ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgeworICAgICAg
ICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXggPT0gbV9mdW5jdGlvbkluZGV4KQorICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChlbnRyeXBvaW50KSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV9jb2RlQmxv
Y2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlcykgeworICAgICAgICAgICAgcmVwYXRjaENhbGxzKHVu
bGlua2VkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSByZXBhdGNoIGFu
eSByZWN1cnNpdmUgY2FsbHMuCisgICAgICAgIHJlcGF0Y2hDYWxscyh1bmxpbmtlZENhbGxzKTsK
KyAgICB9CisKKyAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKK30KKwordm9pZCBydW5P
TUdQbGFuRm9ySW5kZXgoQ29udGV4dCogY29udGV4dCwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkK
K3sKKyAgICBWTSYgdm0gPSAqY29udGV4dC0+dm0oKTsKKworICAgIE1lbW9yeU1vZGUgbW9kZSA9
IGNvbnRleHQtPm1lbW9yeU1vZGUoKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjb250ZXh0LT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlIHVzZSB0aGUgbGVhc3Qg
c2lnbmlmaWNhbnQgYml0IG9mIHRoZSB0aWVyVXBDb3VudCB0byByZXByZXNlbnQgd2hldGhlciBv
ciBub3Qgc29tZW9uZSBoYXMgYWxyZWFkeSBzdGFydGVkIHRoZSB0aWVyIHVwLgorICAgIGlmIChj
b2RlQmxvY2stPm1fY29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRT
dGFydFRpZXJVcCgpKQorICAgICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoYWRvcHRSZWYo
Km5ldyBPTUdQbGFuKHZtLCBjb250ZXh0LT5tb2R1bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5k
ZXgsIG1vZGUsIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmNTA0NjhmOGJlNWRlZTE1
MmFhNDk5ZTk3NmVmZjA0NDdjYzFkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4
dC5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKKyNpbmNsdWRlICJXYXNtUGxhbi5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtJbmZvOworCituYW1lc3BhY2UgV2FzbSB7
CisKK2NsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZSA9IFBsYW47CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVm
ZXJlbmNlIGN5Y2xlLgorICAgIE9NR1BsYW4oVk0mLCBSZWY8TW9kdWxlPiwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisKKyAgICBib29sIGhh
c1dvcmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9jb21wbGV0ZWQ7IH0KKyAgICB2b2lk
IHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92ZXJyaWRlOworICAgIGJvb2wgbXVsdGlUaHJlYWRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgLy8g
Rm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNz
ZXMuLi4KKyAgICB1c2luZyBCYXNlOjptX2xvY2s7CisKKyAgICBib29sIGlzQ29tcGxldGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQorICAgIHZvaWQgY29tcGxldGUo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
Y29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcnVuQ29tcGxldGlvblRhc2tzKGxvY2tlcik7Cisg
ICAgfQorICAgIAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOworICAgIFJlZjxDb2RlQmxvY2s+
IG1fY29kZUJsb2NrOworICAgIE1lbW9yeU1vZGUgbV9tb2RlOworICAgIGJvb2wgbV9jb21wbGV0
ZWQgeyBmYWxzZSB9OworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKK307CisKK3ZvaWQg
cnVuT01HUGxhbkZvckluZGV4KENvbnRleHQqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKyAgICAgICAgICAgICAgICAKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
aW5kZXggN2I3MWNkNjg0ZWQ1N2IxMWZlZDZlODI2NWRlYmFkM2RkZDJlNTc5MS4uYThjNDlkOTQy
MzllN2E3Njg3MGEwMzVjOTNlYTQ5ZGJkODlkZTNkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcApAQCAtNTAsMjkxICs1MCw0NSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLVBs
YW46OlBsYW4oVk0mIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3
b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCitQbGFuOjpQbGFuKFZNJiB2bSwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVs
ZUluZm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9y
bWF0aW9uLT5zb3VyY2UuZGF0YSgpKQogICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZv
cm1hdGlvbi0+c291cmNlLnNpemUoKSkKLSAgICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkK
LSAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKCZ2bSwgV1RGTW92ZSh0YXNrKSkpOwogfQogCi1QbGFuOjpQbGFuKFZN
JiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlv
blRhc2smJiB0YXNrKQotICAgIDogUGxhbih2bSwgbWFrZVJlZigqbmV3IE1vZHVsZUluZm9ybWF0
aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQotewotICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6SW5pdGlhbDsKLX0KLQotUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2Us
IHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9k
dWxlSW5mb3JtYXRpb24obWFrZVJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKFZlY3Rvcjx1aW50
OF90PigpKSkpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChz
b3VyY2VMZW5ndGgpCi0gICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0aWFsKQotICAgICwgbV9hc3lu
Y1dvcmsod29yaykKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIoJnZtLCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKLWNvbnN0IGNoYXIqIFBsYW46OnN0YXRlU3Ry
aW5nKFN0YXRlIHN0YXRlKQordm9pZCBQbGFuOjpydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImKQogewotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIFN0YXRlOjpJ
bml0aWFsOiByZXR1cm4gIkluaXRpYWwiOwotICAgIGNhc2UgU3RhdGU6OlZhbGlkYXRlZDogcmV0
dXJuICJWYWxpZGF0ZWQiOwotICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOiByZXR1cm4gIlByZXBh
cmVkIjsKLSAgICBjYXNlIFN0YXRlOjpDb21waWxlZDogcmV0dXJuICJDb21waWxlZCI7Ci0gICAg
Y2FzZSBTdGF0ZTo6Q29tcGxldGVkOiByZXR1cm4gIkNvbXBsZXRlZCI7Ci0gICAgfQotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19CisgICAgQVNTRVJUKGlzQ29tcGxldGUoKSAm
JiAhaGFzV29yaygpKTsKIAotdm9pZCBQbGFuOjptb3ZlVG9TdGF0ZShTdGF0ZSBzdGF0ZSkKLXsK
LSAgICBBU1NFUlQoc3RhdGUgPj0gbV9zdGF0ZSk7Ci0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAm
JiBzdGF0ZSAhPSBtX3N0YXRlLCAibW92aW5nIHRvIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhzdGF0
ZSksICIgZnJvbSBzdGF0ZTogIiwgc3RhdGVTdHJpbmcobV9zdGF0ZSkpOwotICAgIG1fc3RhdGUg
PSBzdGF0ZTsKLX0KLQotdm9pZCBQbGFuOjpmYWlsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIsIFN0cmluZyYmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
ZmFpbGluZyB3aXRoIG1lc3NhZ2U6ICIsIGVycm9yTWVzc2FnZSk7Ci0gICAgbV9lcnJvck1lc3Nh
Z2UgPSBXVEZNb3ZlKGVycm9yTWVzc2FnZSk7Ci0gICAgY29tcGxldGUobG9ja2VyKTsKKyAgICBm
b3IgKGF1dG8mIHRhc2sgOiBtX2NvbXBsZXRpb25UYXNrcykKKyAgICAgICAgdGFzay5zZWNvbmQt
PnJ1bigqdGFzay5maXJzdCwgKnRoaXMpOworICAgIG1fY29tcGxldGlvblRhc2tzLmNsZWFyKCk7
CisgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7CiB9CiAKIHZvaWQgUGxhbjo6YWRkQ29tcGxl
dGlvblRhc2soVk0mIHZtLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKLSAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKQor
ICAgIGlmICghaXNDb21wbGV0ZSgpKQogICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoJnZtLCBXVEZNb3ZlKHRhc2spKSk7CiAgICAgZWxzZQogICAgICAgICB0
YXNrLT5ydW4odm0sICp0aGlzKTsKIH0KIAotYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKLXsKLSAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlv
biIpOwotICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwotICAgIGlmICh2ZXJib3NlIHx8IE9w
dGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQotICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKLQotICAgIHsKLSAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNl
cihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24pOwotICAgICAg
ICBhdXRvIHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7Ci0gICAgICAgIGlmICgh
cGFyc2VSZXN1bHQpIHsKLSAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92
ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMu
c2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
IlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1
bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0Owot
ICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAg
ICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRl
cm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKLQotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1
bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCkpOwotICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSks
ICIsICIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1
bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVu
Y3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZlcmJvc2UgfHwg
T3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCi0gICAgICAgIGRhdGFMb2dMbigiVG9vayAi
LCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygpLCAiIHVz
IHRvIHZhbGlkYXRlIG1vZHVsZSIpOwotICAgIGlmIChtX2FzeW5jV29yayA9PSBWYWxpZGF0aW9u
KQotICAgICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKLSAgICBlbHNlCi0gICAgICAg
IG1vdmVUb1N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFBsYW46OnByZXBhcmUoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxp
ZGF0ZWQpOwotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIp
OwotCi0gICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGlsZVN0YXJ0LCBX
ZWJBc3NlbWJseUNvbXBpbGVFbmQpOwotCi0gICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBb
dGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgewot
ICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOwotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoc2l6ZSk7Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCh3aGF0KTsKLSAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgYnVpbGRl
ci50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9OwotCi0gICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2Nh
dGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0g
ICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCAiIFdl
YkFzc2VtYmx5IHRvIEphdmFTY3JpcHQgc3R1YnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNh
cGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUo
KSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJseSBjYWxscyIpCi0gICAgICAg
IHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50ZXJuYWxGdW5jdGlvbnMsIGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQotICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25Mb2NhdGlv
bnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNp
emUoKSk7Ci0gICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9uTG9jYXRp
b25zLnNpemUoKSk7Ci0gICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbkxv
Y2F0aW9ucy5zaXplKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGlt
cG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7ICsraW1wb3J0
SW5kZXgpIHsKLSAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW1wb3J0c1tpbXBvcnRJbmRleF07Ci0gICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1bnNpZ25l
ZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKTsKLSAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51
bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBtYWtlU3RyaW5nKGltcG9ydC0+bW9k
dWxlKSwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPmZpZWxkKSk7Ci0gICAgICAgIG1fd2FzbVRv
V2FzbUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQod2FzbVRvV2FzbShpbXBvcnRGdW5jdGlvbklu
ZGV4KSk7Ci0gICAgfQotCi0gICAgbW92ZVRvU3RhdGUoU3RhdGU6OlByZXBhcmVkKTsKLX0KLQot
Ly8gV2UgZG9uJ3QgaGF2ZSBhIHNlbWFwaG9yZSBjbGFzcy4uLiBhbmQgdGhpcyBkb2VzIGtpbmRh
IGludGVyZXN0aW5nIHRoaW5ncy4KLWNsYXNzIFBsYW46OlRocmVhZENvdW50SG9sZGVyIHsKLXB1
YmxpYzoKLSAgICBUaHJlYWRDb3VudEhvbGRlcihQbGFuJiBwbGFuKQotICAgICAgICA6IG1fcGxh
bihwbGFuKQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9jayk7
Ci0gICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcysrOwotICAgIH0KLQotICAg
IH5UaHJlYWRDb3VudEhvbGRlcigpCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3BsYW4ubV9sb2NrKTsKLSAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07
Ci0KLSAgICAgICAgaWYgKCFtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgJiYgIW1fcGxh
bi5oYXNXb3JrKCkpCi0gICAgICAgICAgICBtX3BsYW4uY29tcGxldGUobG9ja2VyKTsKLSAgICB9
Ci0KLSAgICBQbGFuJiBtX3BsYW47Ci19OwotCi12b2lkIFBsYW46OmNvbXBpbGVGdW5jdGlvbnMo
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQotewotICAgIEFTU0VSVChtX3N0YXRlID49IFN0YXRl
OjpQcmVwYXJlZCk7Ci0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIGNvbXBpbGF0
aW9uIik7Ci0KLSAgICBpZiAoIWhhc1dvcmsoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGhy
ZWFkQ291bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsKLQotICAgIHNpemVfdCBieXRlc0NvbXBpbGVk
ID0gMDsKLSAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICBpZiAoZWZmb3J0ID09IFBhcnRpYWwgJiYgYnl0ZXNDb21waWxlZCA+PSBPcHRpb25zOjp3
ZWJBc3NlbWJseVBhcnRpYWxDb21waWxlTGltaXQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50
SW5kZXggPj0gZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKLSAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBmdW5jdGlvbkluZGV4ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgICAgICAgICArK21fY3VycmVu
dEluZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCA9IG1fc291cmNlICsgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0g
ICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9u
SW5kZXhdLmVuZCAtIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAg
ICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOwotICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOwotICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21U
b1dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUlu
ZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVy
ZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwot
Ci0gICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIE9wdGlvbnM6OndlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCgpKTsK
LQotICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKLSAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmICgh
bV9lcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBjb21waWxlcyBj
b3VsZCBmYWlsIHNpbXVsdGFuZW91c2x5LiBXZSBhcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0
LgotICAgICAgICAgICAgICAgIGZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJl
cihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCi0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9uTG9jYXRpb25z
LnNpemUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VBbmRDb21w
aWxlUmVzdWx0KTsKLSAgICAgICAgYnl0ZXNDb21waWxlZCArPSBmdW5jdGlvbkxlbmd0aDsKLSAg
ICB9Ci19Ci0KLXZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKQotewot
ICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsK
LSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgQ29tcGxldGlvbiIpOwotCi0gICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7Ci0gICAgICAgIGZvciAodWludDMyX3Qg
ZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBt
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5h
bEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlv
biA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblsl
aV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKLSAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNFbnRyeXBvaW50VG9X
YXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAgICAgICAgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5
cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxpbmtlZCkgewotICAgICAgICAgICAgICAgIHZvaWQq
IGV4ZWN1dGFibGVBZGRyZXNzOwotICAgICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0
aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rp
b25JbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wb3J0cyBjb3VsZCBo
YXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50
LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChj
YWxsLmZ1bmN0aW9uSW5kZXgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleCAtIG1fd2FzbVRvV2Fz
bUV4aXRTdHVicy5zaXplKCkpLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRk
cmVzcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fc3Rh
dGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgewotICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29t
cGxldGVkKTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogbV9jb21wbGV0aW9uVGFza3MpCi0g
ICAgICAgICAgICB0YXNrLnNlY29uZC0+cnVuKCp0YXNrLmZpcnN0LCAqdGhpcyk7Ci0gICAgICAg
IG1fY29tcGxldGlvblRhc2tzLmNsZWFyKCk7Ci0gICAgICAgIG1fY29tcGxldGVkLm5vdGlmeUFs
bCgpOwotICAgIH0KLX0KLQogdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6Q29t
cGxldGVkKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdhaXQgY29uZGl0
aW9uYWxseSBzbyB3ZSBkb24ndCBoYXZlIHRvIGhvbGQgdGhlIGxvY2sgdG8gY29tcGxldGUgLyBm
YWlsLgorICAgIGlmICghaXNDb21wbGV0ZSgpKSB7CiAgICAgICAgIG1fY29tcGxldGVkLndhaXQo
bV9sb2NrKTsKICAgICB9CiB9CkBAIC0zNTMsMTMgKzEwNywxMyBAQCBib29sIFBsYW46OnRyeVJl
bW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKICAgICBpZiAoIXJlbW92ZWRBbnlUYXNrcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBs
ZXRlZCkgeworICAgIGlmIChpc0NvbXBsZXRlKCkpIHsKICAgICAgICAgLy8gV2UgdHJpdmlhbGx5
IGNhbmNlbCBhbnl0aGluZyB0aGF0J3MgY29tcGxldGVkLgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBpZiAobV9jb21wbGV0aW9uVGFza3MuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fY3VycmVudEluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5LnNpemUoKTsKKyAgICBpZiAobV9jb21wbGV0aW9uVGFza3Muc2l6ZSgpID09IDEpIHsK
KyAgICAgICAgQVNTRVJUKCFtX2NvbXBsZXRpb25UYXNrc1swXS5maXJzdCk7CiAgICAgICAgIGZh
aWwobG9ja2VyLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5IFBsYW4gd2FzIGNhbmNlbGxlZC4g
SWYgeW91IHNlZSB0aGlzIGVycm9yIG1lc3NhZ2UgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53
ZWJraXQub3JnISIpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY3LDYgKzEy
MSwxMyBAQCBib29sIFBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCit7CisgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOworICAgIG1fZXJy
b3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGNvbXBsZXRlKGxvY2tlcik7
Cit9CisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCBiNmJlZjA2ZDllMzlmNmY3Yjkw
NTdkNzExOGVlOGM0ZWJiNmU0ZTIxLi5kNDVlZDFmZDY4MjJlNDEzYWViZTY5MTUxMWJmYjdmMWE4
MDEzNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTQ5LDEwOSAr
NDksNDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBQbGFu
Jik7CiAgICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFj
a1R5cGU+PjsKICAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1
cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFZNJiwgUGxhbiYpIHsgfSk7IH0K
LSAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRhdGlvbiB9
OwotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5j
ZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4K
LSAgICBQbGFuKFZNJiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0
aW9uVGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgUGxhbihWTSYsIFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNrJiYpOworCiAgICAgLy8gTm90ZTogVGhp
cyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5
IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8v
IEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92
ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRF
IFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25U
YXNrJiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYp
OworICAgIHZpcnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlv
dSBndWFyYW50ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRo
ZQogICAgIC8vIGNvbXBsZXRpb24gdGFza3MgYmVpbmcgY2FsbGVkLgogICAgIHZvaWQgYWRkQ29t
cGxldGlvblRhc2soVk0mLCBDb21wbGV0aW9uVGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRW
YWxpZGF0ZU1vZHVsZSgpOwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7
Ci0gICAgZW51bSBDb21waWxhdGlvbkVmZm9ydCB7IEFsbCwgUGFydGlhbCB9OwotICAgIHZvaWQg
Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCA9IEFsbCk7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVu
Y3RvciYpOwotCi0gICAgVmVjdG9yPEV4cG9ydD4mIGV4cG9ydHMoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwotICAgICAgICBy
ZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0czsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5m
b3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25Db3VudCgpOwotICAgIH0KLQotICAgIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3JtYXRpb24oKQotICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwotICAgICAgICByZXR1cm4g
V1RGTW92ZShtX21vZHVsZUluZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICBCYWc8Q2FsbExpbmtJ
bmZvPiYmIHRha2VDYWxsTGlua0luZm9zKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV9jYWxs
TGlua0luZm9zKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiYm
IHRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNt
VG9XYXNtRXhpdFN0dWJzKTsKLSAgICB9Ci0KICAgICB2b2lkIHNldE1vZGUoTWVtb3J5TW9kZSBt
b2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KICAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KIAotICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKLSAgICAg
ICAgSW5pdGlhbCwKLSAgICAgICAgVmFsaWRhdGVkLAotICAgICAgICBQcmVwYXJlZCwKLSAgICAg
ICAgQ29tcGlsZWQsCi0gICAgICAgIENvbXBsZXRlZCAvLyBXZSBzaG91bGQgb25seSBtb3ZlIHRv
IENvbXBsZXRlZCBpZiB3ZSBhcmUgaG9sZGluZyB0aGUgbG9jay4KLSAgICB9OwotCiAgICAgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTWVzc2FnZTsg
fQogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4g
IWVycm9yTWVzc2FnZSgpLmlzTnVsbCgpOyB9Ci0gICAgYm9vbCBoYXNXb3JrKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21waWxlZDsgfQotICAgIGJvb2wgaGFzQmVlblByZXBh
cmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaGFzV29yaygpIGNvbnN0ID0gMDsKKyAgICBlbnVtIENvbXBpbGF0aW9uRWZm
b3J0IHsgQWxsLCBQYXJ0aWFsIH07CisgICAgdmlydHVhbCB2b2lkIHdvcmsoQ29tcGlsYXRpb25F
ZmZvcnQgPSBBbGwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNvbnN0
ID0gMDsKIAogICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaXQgY2FuY2VsbGVkIHRoZSBwbGFuLgogICAgIGJvb2wgdHJ5UmVtb3ZlVk1BbmRDYW5j
ZWxJZkxhc3QoVk0mKTsKIAotcHJpdmF0ZToKLSAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsK
LSAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRIb2xkZXI7Ci0KLSAgICB2b2lkIGNvbXBsZXRl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJik7Ci0KLSAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIHJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExv
Y2tlciYpOwogICAgIHZvaWQgZmFpbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFN0cmluZyYmIGVy
cm9yTWVzc2FnZSk7CiAKLSAgICBjb25zdCBjaGFyKiBzdGF0ZVN0cmluZyhTdGF0ZSk7CisgICAg
dmlydHVhbCBib29sIGlzQ29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNv
bXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgPSAwOwogCiAgICAgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2Fs
bExpbmtJbmZvczsKLSAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dh
c21FeGl0U3R1YnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwotICAgIFZlY3RvcjxDb21waWxhdGlvbkNv
bnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Vk0q
LCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOwogCi0gICAgVmVjdG9yPFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsK
ICAgICBjb25zdCB1aW50OF90KiBtX3NvdXJjZTsKICAgICBjb25zdCBzaXplX3QgbV9zb3VyY2VM
ZW5ndGg7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIE1lbW9yeU1vZGUgbV9tb2Rl
IHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBMb2NrIG1fbG9jazsKICAgICBD
b25kaXRpb24gbV9jb21wbGV0ZWQ7Ci0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBjb25zdCBBc3lu
Y1dvcmsgbV9hc3luY1dvcms7Ci0gICAgdWludDhfdCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7
IDAgfTsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleCB7IDAgfTsKIH07CiAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmMwOWFlMmI5NjYwMDkzYTliZWI3MGQxYmQxZDhjNDUxMzQ2NTgwMi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkNhbGxl
ZUJpdHMuaCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbVBsYW4uaCIK
LQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KLXZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2Fs
bGJhY2spCi17Ci0gICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnRl
cm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7Ci0gICAgICAg
IFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25z
W2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7Ci0KLSAgICAgICAgUmVmPFdhc206OkNhbGxl
ZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5j
dGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20oanNFbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7Ci0KLSAgICAgICAgUmVmPFdh
c206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShX
VEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKLQotICAgICAgICBj
YWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVl
KSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwotICAgIH0KLX0KLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjk3
N2Q4OTUyNjQ2NDAxOGUxODU2ZDllNGE4NGQ5M2Q2OTE0ZWVjZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCkBAIC0wLDAgKzEs
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20geworCisgICAgLy8gVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSB0aWVyIHVw
IGNvdW50cyBmb3IgV2FzbSBiaW5hcmllcy4gVGhlIG1haW4gaW50ZXJlc3RpbmcgdGhpbmcgYWJv
dXQKKyAgICAvLyB3YXNtIHRpZXJpbmcgdXAgY291bnRzIGlzIHRoYXQgdGhlIGxlYXN0IHNpZ25p
ZmljYW50IGJpdCBpbmRpY2F0ZXMgaWYgdGhlIHRpZXIgdXAgaGFzIGFscmVhZHkKKyAgICAvLyBz
dGFydGVkLiBBbHNvLCB3YXNtIGNvZGUgZG9lcyBub3QgYXRvbWljYWxseSB1cGRhdGUgdGhpcyBj
b3VudC4gVGhpcyBpcyBiZWNhdXNlIHdlCisgICAgLy8gZG9uJ3QgY2FyZSB0b28gbXVjaCBpZiB0
aGUgY291bnRkb3duIGlzIHNsaWdodGx5IG9mZi4gVGhlIHRpZXIgdXAgdHJpZ2dlciBpcyBhdG9t
aWMsIGhvd2V2ZXIsCisgICAgLy8gc28gdGllciB1cCB3aWxsIGJlIHRyaWdnZXJlZCBleGFjdGx5
IG9uY2UuCisgICAgY2xhc3MgVGllclVwQ291bnQgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShUaWVyVXBDb3VudCk7CisgICAgcHVibGljOgorICAgICAgICBUaWVyVXBDb3VudCgpCisg
ICAgICAgICAgICA6IG1fY291bnQoT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCgp
ICogMikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVGllclVwQ291bnQoVGllclVw
Q291bnQmJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY291
bnQgPT0gT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCgpICogMik7CisgICAgICAg
ICAgICBtX2NvdW50ID0gb3RoZXIubV9jb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyB1aW50MzJfdCBsb29wRGVjcmVtZW50KCkgeyByZXR1cm4gT3B0aW9uczo6d2ViQXNzZW1ibHlM
b29wRGVjcmVtZW50KCkgKiAyOyB9CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCBmdW5jdGlvbkVu
dHJ5RGVjcmVtZW50KCkgeyByZXR1cm4gT3B0aW9uczo6d2ViQXNzZW1ibHlGdW5jdGlvbkVudHJ5
RGVjcmVtZW50KCkgKiAyOyB9CisKKyAgICAgICAgYm9vbCBzaG91bGRTdGFydFRpZXJVcCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKFdURjo6YXRvbWljRXhjaGFuZ2VPcigmbV9j
b3VudCwgMSkgJiAxKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdWludDMy
X3QgbV9jb3VudDsKKyAgICB9OworICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCmluZGV4IDVmYWRmY2IxMzU3MDkwOTMyMmZhODc5ZjViNzZkNDY5
OWJlOWMzZDguLjc2YTg3YWMxYjQ3MzZmM2NmMzdjMzUzOWRiYzk2MWY2Nzg2YTAxMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApAQCAtNzQsMTAgKzc0
LDggQEAgcHJvdGVjdGVkOgogCiAgICAgICAgICAgICBlbGVtZW50ID0gcXVldWUucGVlaygpOwog
ICAgICAgICAgICAgLy8gT25seSBvbmUgdGhyZWFkIHNob3VsZCB2YWxpZGF0ZS9wcmVwYXJlLgot
ICAgICAgICAgICAgaWYgKCFxdWV1ZS5wZWVrKCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsK
KyAgICAgICAgICAgIGlmICghcXVldWUucGVlaygpLnBsYW4tPm11bHRpVGhyZWFkZWQoKSkKICAg
ICAgICAgICAgICAgICBxdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBv
bGxSZXN1bHQ6Oldvcms7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChlbGVtZW50
LnBsYW4tPmhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29y
azsKQEAgLTEwMCwxMyArOTgsMTIgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIFBsYW4qIHBsYW4g
PSBlbGVtZW50LnBsYW4uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChwbGFuKTsKLSAgICAgICAgaWYg
KCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgewotICAgICAgICAgICAgcGxhbi0+cGFyc2VBbmRW
YWxpZGF0ZU1vZHVsZSgpOwotICAgICAgICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xvY2spKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgcGxhbi0+cHJlcGFyZSgpOwogCisgICAgICAgIGJv
b2wgd2FzTXVsdGlUaHJlYWRlZCA9IHBsYW4tPm11bHRpVGhyZWFkZWQoKTsKKyAgICAgICAgcGxh
bi0+d29yayhQbGFuOjpQYXJ0aWFsKTsKKworICAgICAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmso
KSB8fCBwbGFuLT5tdWx0aVRocmVhZGVkKCkpOworICAgICAgICBpZiAocGxhbi0+aGFzV29yaygp
ICYmICF3YXNNdWx0aVRocmVhZGVkICYmIHBsYW4tPm11bHRpVGhyZWFkZWQoKSkgewogICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAgICAgICAgICBl
bGVtZW50LnNldFRvTmV4dFByaW9yaXR5KCk7CiAgICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVl
LmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CkBAIC0xMTQsNyArMTExLDYgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKGxvY2tlcik7CiAgICAgICAgIH0KIAotICAg
ICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKFBsYW46OlBhcnRpYWwpOwogICAgICAgICByZXR1
cm4gY29tcGxldGUoaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAppbmRleCBhZDRiMTA4OTkwNmUzNjc1
NDkzN2I2OTliYmRmOGJkY2U1NGQyOTBiLi42YjY5MzUyYWE3NWM5YjVjOGMyM2JmMWYxNDljM2Rh
ZWZiYTE2ZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29y
a2xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApA
QCAtNTcsMTMgKzU3LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZhdGVQbGFuKEpTUHJvbWlz
ZURlZmVycmVkKiwgUGxhbiopOwogICAgIHZvaWQgZGVhY3RpdmVQbGFuKEpTUHJvbWlzZURlZmVy
cmVkKiwgUGxhbiopOwogCi1wcml2YXRlOgotICAgIGNsYXNzIFRocmVhZDsKLSAgICBmcmllbmQg
Y2xhc3MgVGhyZWFkOwotCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUaWNrZXQ7Ci0gICAgVGlja2V0
IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RHcmFudGVkVGlja2V0Kys7IH0KLQogICAgIGVu
dW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93biwKICAgICAgICAgU3luY2hyb25v
dXMsCkBAIC03Miw2ICs2NSwxMyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgY29uc3QgY2hhciog
cHJpb3JpdHlTdHJpbmcoUHJpb3JpdHkpOwogCitwcml2YXRlOgorICAgIGNsYXNzIFRocmVhZDsK
KyAgICBmcmllbmQgY2xhc3MgVGhyZWFkOworCisgICAgdHlwZWRlZiB1aW50NjRfdCBUaWNrZXQ7
CisgICAgVGlja2V0IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RHcmFudGVkVGlja2V0Kys7
IH0KKwogICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQgewogICAgICAgICBQcmlvcml0eSBwcmlvcml0
eTsKICAgICAgICAgVGlja2V0IHRpY2tldDsKQEAgLTg3LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKICAgICB9CiAKLQog
ICAgIEJveDxMb2NrPiBtX2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZs
b3cgYnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21w
aWxlIHRoaW5ncyBvZiB0aGUgc2FtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmMTQwMmEzOTdkZTBj
Y2QyYjkzMDJiMTQzODg1ZmMzODcxM2RmMjUwLi5kYzJkNjRlOTNmYjU2YTI4NjlhYzdhNDFjNGU0
MjdjMmMxZjI4NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklubGluZXMu
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKIAogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggNTFjN2UzMWQzYmUwMjAwZTUyNjFjNGUx
M2ZlZGJhNGEwM2Q0YjRlNi4uZGRkNmU1ODQzYmRlMWMzZTEyMzc4OTYzMTQxYTIyYzY2NDYyYjYy
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaApAQCAtNjgsMTQgKzY4LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KLSAgICBXYXNtOjpDYWxsZWUmIHdh
c21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7
CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgfQogCi0gICAg
dm9pZCogd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAg
ICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1w
b3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGltcG9ydFdh
c21Ub0pTU3R1YihpbXBvcnRJbmRleCk7CisgICAgICAgIHJldHVybiAmaW1wb3J0V2FzbVRvSlNT
dHViKGltcG9ydEluZGV4KTsKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5kZXggYzgy
ZTM1MmYxOWNjMmE0NDI2ZGFhNDU5NzMzMGQ5M2VjYzJkYjUwMS4uNjgzZDE2NDk5ZGY0NGYzOTIy
ZmIyNTY5NjY1OWEwNTA2NDUzNWJhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCkBAIC0xMjgsMTQgKzEyOCwxNCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRl
eCwgV2ViQXNzZW1ibHlGdW5jdGlvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9z
aXplKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0
aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKGZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQo
KSk7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVu
Y3Rpb24oKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2
bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5jdGlvbikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CiAgICAgbV9qc0Z1bmN0aW9u
cy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMu
Z2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCBmNzcyZDk4ZDA2YzYxYzJhZDE1Y2IxY2JkODJlZTQ4
YmZmYzAxYjRhLi44YTdhMWQwYjY4ZWJhMTc2YWVhOGE1YjE1NzQ4OGY4OGYxYmNjZmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcApAQCAtMTU3LDEwICsxNTcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6Q2FsbGVlJiB3
YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJB
c3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0Vu
dHJ5cG9pbnQsIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50
LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKLSAgICBBU1NFUlQoJmpz
RW50cnlwb2ludCAhPSAmd2FzbUVudHJ5cG9pbnQpOwotCiAgICAgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwg
Tm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1l
KTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlG
dW5jdGlvblN0cnVjdHVyZSgpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkp
IFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5
cG9pbnQsIHdhc21FbnRyeXBvaW50LCBzaWduYXR1cmVJbmRleCk7CkBAIC0xNzUsMTEgKzE3Mywx
MCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFdlYkFzc2VtYmx5RnVuY3Rp
b25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rp
b246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdh
c206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNt
OjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
d2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogICAg
IDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2pzRW50cnlwb2lu
dChqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgpKQotICAgICwgbV93YXNtRW50cnlwb2ludCh3YXNt
RW50cnlwb2ludC5lbnRyeXBvaW50KCkpCi0gICAgLCBtX3NpZ25hdHVyZUluZGV4KHNpZ25hdHVy
ZUluZGV4KQorICAgICwgbV93YXNtRnVuY3Rpb24oV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihzaWdu
YXR1cmVJbmRleCwgd2FzbUVudHJ5cG9pbnQpKQogeyB9CiAKIHZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCmluZGV4IDRjYmY1ZGM0ZTIzOWYzNTBkYmRkMDU3ZDM4YjZmMTY1MmU4OTBmODIuLjNiYmEw
OTNiMzJmMzU5NmZkZDc5MDNjNDAzNTJjZjIwNTdiMTNkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKQEAgLTQ5LDE2ICs0
OSwxOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBv
aW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2ln
bmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQotICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1
cmVJbmRleDsgfQotICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50
cnlwb2ludDsgfQorICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KKyAgICBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uLmNvZGU7IH0KKyAgICBXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uIGNhbGxhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbjsg
fQorCiAgICAgdm9pZCoganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7IH0K
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2luc3RhbmNlKTsgfQotICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21FbnRyeXBvaW50KTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21GdW5jdGlvbikgKyBX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKQEAgLTY2LDE4ICs2OCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAKIHByaXZhdGU6
Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9p
bnQsIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwg
V2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsK
IAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0g
ICAgLy8gV2UgY2FuIGhvbGQgcmF3IHBvaW50ZXJzIHRvIHRoZXNlIGV4ZWN1dGFibGUgYWRkcmVz
cyBwb2ludGVycyBzaW5jZQotICAgIC8vIHdlIGhhdmUgYSBHQyByZWZlcmVuY2UgdG8gb3VyIGlu
c3RhbmNlLCB3aGljaCBrZWVwcyBhbGl2ZSB0aGUgQ29kZUJsb2NrLAotICAgIC8vIHdoaWNoIG93
bnMgdGhpcyBwb2ludGVyLgotICAgIHZvaWQqIG1fanNFbnRyeXBvaW50OwotICAgIHZvaWQqIG1f
d2FzbUVudHJ5cG9pbnQ7Ci0gICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IHNp
Z25hdHVyZUluZGV4IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQorICAgIC8vIEl0J3Mgc2Fm
ZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxsYWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNh
dXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBv
aW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCi0gICAgLy8gZW5zdXJl
cyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgotICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CisgICAgLy8gZW5zdXJlcyB0
aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCisg
ICAgdm9pZCogbV9qc0VudHJ5cG9pbnQ7CisgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBtX3dh
c21GdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmlu
ZGV4IDAxNzFmMmQ4MDA1YzFmZDdiMDFmY2E4MGEwMjgwNWMzN2E3NWU1MDAuLjcwNTRhODljNWE4
MjQ2YTA4Mjk4M2I0YTFmNmU0MDI1ZTNhN2ViZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTEy
NSwxMCArMTI1LDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0
YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICAgICAg
Ly8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAgICBj
LiBSZXR1cm4gZnVuYy4KICAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIHdhc21F
bnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgV2FzbTo6V2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2Rl
QmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShl
eHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpLCBpbnN0YW5jZSwganNFbnRy
eXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAg
ICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCksIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENh
bGxlZSwgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAg
ICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
LAogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlv
bik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXYXNtOjpDYWxs
ZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0
YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUs
IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT53YXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4
U3BhY2UpOworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3Rh
cnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTI3MCwxNCArMjcwLDE0IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAg
ICAgICAgICBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7
CisgICAgICAgICAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAg
ICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBT
YXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAg
ICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4g
RWxlbWVudCB3LyBpbmRleCAwLgogICAgICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5j
ZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwogICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rp
b246OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9i
amVjdCgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5n
ZXQoKSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJl
SW5kZXgpOworICAgICAgICAgICAgICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0
KCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgp
LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1
cmVJbmRleCk7CiAKICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxl
SW5kZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5j
cHAKaW5kZXggNzA4NDFmMDVkODU1YThhMzA1YTU4OGRlNTU5ZGNkM2JlZGMyYmI1OS4uZGFiMjcw
ZjNiOTAxYjY1OWQyMjBlNWYxNDgxZmFjMGI0ZTg1NjU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcApAQCAtMzgs
MTIgKzM4LDEzIEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJQ
cm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKLSNpbmNs
dWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCiAjaW5jbHVkZSAiV2Fz
bVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgogCiB1c2luZyBKU0M6
Oldhc206OlBsYW47Cit1c2luZyBKU0M6Oldhc206OkJCUVBsYW47CiAKIG5hbWVzcGFjZSBKU0Mg
ewogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxl
RnVuYyhFeGVjU3RhdGUqKTsKQEAgLTIxMSw3ICsyMTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVy
RnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
V2FzbTo6UGxhbiBwbGFuKHZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBsYW46OlZh
bGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4odm0sIGJh
c2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9u
dEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9P
TSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggMTcxMWUwNDhkYzc0ZjVkMzJm
ZGU0YTJkOGM0MWQzNTRkMmQ3Mjc0ZC4uYjIwYjU0YjMyMjcwNTViMTc5NTdkNjMzN2E4MGY5NTE1
YmIyZTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNTIsMTAgKzUyLDkgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChl
eGVjKSkpOwogfQogCi1XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHZvaWQq
IHdhc21FbnRyeXBvaW50Q29kZSkKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHdhc21GdW5jdGlv
bikKICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwgbV93YXNt
RW50cnlwb2ludENvZGUod2FzbUVudHJ5cG9pbnRDb2RlKQotICAgICwgbV9zaWduYXR1cmVJbmRl
eChzaWduYXR1cmVJbmRleCkKKyAgICAsIG1fd2FzbUZ1bmN0aW9uKHdhc21GdW5jdGlvbikKIHsg
fQogCiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jaywgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCkBAIC02Myw3
ICs2Miw3IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghZnVuY3Rpb24tPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5m
bygpKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7
CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsK
LSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBjb2RlQmxv
Y2stPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKKyAgICBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uU3RydWN0dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oc2lnbmF0dXJlSW5k
ZXgsIGNvZGVCbG9jay0+d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkpKTsK
ICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRp
b24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0
aW9uLCBjb2RlQmxvY2spOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaApp
bmRleCBlOTYzN2Q3OWFhODU3YzBlNDVmOGYwZTc5NmY5ODdhOTM0MTQ2MmZlLi45ZjZkMzQ2ZmIz
ZTQ3MDBlMDQ5NDM0YTRkZTgzMWI1ZTRlMmE4Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKQEAg
LTQzLDggKzQzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlt
cG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlSW5kZXg7IH0KLSAgICB2b2lkKiB3YXNtRW50
cnlwb2ludCgpIHsgcmV0dXJuIG1fd2FzbUVudHJ5cG9pbnRDb2RlOyB9CisgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlv
bi5zaWduYXR1cmVJbmRleDsgfQorICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
ICB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0
aW9uLmNvZGU7IH0KKyAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIGNhbGxhYmxlRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbjsgfQogICAgIEpTT2JqZWN0KiBmdW5jdGlv
bigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgpAQCAtNTMsMTcg
KzU0LDE2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09iamVj
dCosIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6
U2lnbmF0dXJlSW5kZXgsIHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSk7CisgICAgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206
OkNhbGxhYmxlRnVuY3Rpb24pOwogCiAgICAgLy8gV2Uga2VlcCBhIHJlZmVyZW5jZSB0byBvdXIg
Q29kZUJsb2NrIGJlY2F1c2Ugd2UgaGF2ZSBhIHJhdwogICAgIC8vIHBvaW50ZXIgdG8gYXNtIGNv
ZGUgdGhhdCBpdCBvd25zLgogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
PiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247Ci0g
ICAgdm9pZCogbV93YXNtRW50cnlwb2ludENvZGU7Ci0gICAgLy8gSXQncyBzYWZlIHRvIGp1c3Qg
aG9sZCB0aGUgcmF3IHNpZ25hdHVyZUluZGV4IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQor
ICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxsYWJsZUZ1bmN0aW9uIGJl
Y2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBDb2RlQmxvY2ssIHdoaWNo
IHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCi0gICAgLy8gZW5z
dXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgot
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CisgICAgLy8gZW5zdXJl
cyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQu
CisgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBtX3dhc21GdW5jdGlvbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308299</attachid>
            <date>2017-04-26 16:03:33 -0700</date>
            <delta_ts>2017-04-26 16:29:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170134-20170426160332.patch</filename>
            <type>text/plain</type>
            <size>156075</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NGI2YWQ5MWEyYWU2NTBiNWU1MTkyNDgxNzc2YmJlZmZjZjcyODAzLi43NDcxYWQzM2VmNGNhOGMw
YjBiZWM5NTIxZDM0MjZkMTcwMWIxNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTAgQEAKKzIwMTctMDQtMjYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IEltcGxlbWVudCB0aWVyIHVwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
ZW5zdXJlQ2FjaGVMaW5lU3BhY2UpOgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24u
aDoKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uVGhyZWFkU2FmZU5lYXJDYWxsOjpDb2RlTG9j
YXRpb25UaHJlYWRTYWZlTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjp0aHJl
YWRTYWZlTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6dGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKToKKyAgICAgICAgKiBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6aW5zdCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlNodWZmbGVQYWlyOjpvcGNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvblRl
c3RXYXNtTW9kdWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxvY2spOgorICAgICAgICAqIHJ1bnRpbWUv
T3B0aW9ucy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
QmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwLgorICAgICAgICAoSlND
OjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjptb3ZlVG9TdGF0ZSk6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENvdW50SG9sZGVyKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6On5UaHJlYWRDb3VudEhv
bGRlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oldh
c206OkJCUVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaC4KKyAgICAgICAgKiB3
YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbklubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUu
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjplbnRyeXBvaW50KToKKyAgICAgICAgKiB3
YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNv
ZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OnRpZXJVcENvdW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q29kZUJsb2NrOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q2FsbGFibGVGdW5jdGlvbjo6Q2FsbGFibGVGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6Oldhc206OkNhbGxhYmxlRnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmguCisg
ICAgICAgIChKU0M6Oldhc206Ondhc21UaHJlYWRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6c3Rh
cnRUcmFja2luZ0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXNldEluc3Ry
dWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMpOgorICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJl
YWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
aC4KKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpt
YWtlVmFsaWRhdGlvblJlc3VsdCk6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VWYWxpZGF0aW9u
Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlU3luYyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyk6CisgICAgICAgICogd2Fz
bS9XYXNtTW9kdWxlLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29kZUJsb2NrRm9y
KToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cnVuT01HUGxhbkZvckluZGV4KToKKyAgICAgICAg
KiB3YXNtL1dhc21PTUdQbGFuLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuSW5saW5lcy5oLgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
cnVuQ29tcGxldGlvblRhc2tzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6YWRkQ29tcGxl
dGlvblRhc2spOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OnN0YXRlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW92
ZVRvU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cHJlcGFy
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENvdW50SG9sZGVy
OjpUaHJlYWRDb3VudEhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6Y29tcGxldGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZXhwb3J0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OmludGVybmFsRnVuY3Rpb25Db3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRha2VNb2R1bGVJbmZvcm1hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRha2VDYWxsTGlua0luZm9zKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNXb3JrKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzQmVlblByZXBhcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmguCisgICAgICAgIChKU0M6Oldhc206OlRpZXJV
cENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojps
b29wRGVjcmVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OmZ1bmN0aW9u
RW50cnlEZWNyZW1lbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6c2hvdWxk
U3RhcnRUaWVyVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6Y291bnQpOgor
ICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Xb3Jr
bGlzdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6bmV4dFRpY2tldCk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6d2FzbVRvSnNDYWxs
U3R1YkZvckltcG9ydCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Ondh
c21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0
aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbik6CisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGxhYmxlRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2FzbUVudHJ5cG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRP
Zldhc21FbnRyeXBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246Ondhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNhbGxhYmxlRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOiBEZWxl
dGVkLgorCiAyMDE3LTA0LTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjE1NDc2LgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyNWIzY2ZiODUzMDJiODkwZjIwNjdkMTY1YzlkODdhNmU5
Y2NmOGM2Li5lNjkwMWMxYzlkNjg1ZmQyODVhMjM5OGQwODEwZDQwZDNkMGFlMjZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM0MCw2ICsxMzQwLDggQEAKIAkJNTJGNkMzNUUx
RTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzBGQjMwMjFFN0EwQjZFMDAzQzE5REQg
LyogV2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi87IH07
CiAJCTUzMEZCMzA0MUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDMxRTdBMTE0NjAw
M0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi87IH07CisJCTUzMTFCRDRBMUVBNTgxRTUwMDUy
NTI4MSAvKiBXYXNtT01HUGxhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzExQkQ0ODFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3Bw
ICovOyB9OworCQk1MzExQkQ0QjFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDQ5MUVBNTgx
RTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5oICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBB
RjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9Owog
CQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBC
IC8qIFdhc21QbGFuLmNwcCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdh
c21PcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
M0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzNzQsMTAgKzEzNzYsMTUgQEAKIAkJNTNC
MEJFMzgxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNCMEJFMzcxRTU2
MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwICovOyB9OwogCQk1
M0M2RkVFRjFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRUUxRThBREZBOTAwQjE4
NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTNDNkZFRjExRThBRkUwQzAwQjE4
NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVP
cmlnaW4uY3BwICovOyB9OworCQk1M0NBNzMwOTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBs
YW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTND
QTczMDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLzsgfTsKKwkJNTNDQTcz
MEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2Fz
bUJCUVBsYW4uaCAqLzsgfTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFk
ZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9
OwogCQk1M0Q0NDRERTFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURB
RjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovOyB9OwogCQk1M0U3NzdF
MzFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTc3N0UxMUU5MkUyNjUwMDdD
QkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovOyB9OwogCQk1M0U3NzdFNDFFOTJF
MjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U3NzdFMjFFOTJFMjY1MDA3Q0JFQzQgLyog
V2FzbU1vZHVsZUluZm9ybWF0aW9uLmggKi87IH07CisJCTUzRTlFMEFCMUVBRTgzREYwMEZFRTI1
MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5l
VGhyZWFkcy5jcHAgKi87IH07CisJCTUzRTlFMEFDMUVBRTgzREYwMEZFRTI1MSAvKiBXYXNtTWFj
aGluZVRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLzsg
fTsKKwkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUwQUUxRUFFQzQ1
NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNt
U2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsKIAkJNTNG
NDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlB
MUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RDFENTkwMUYyMDA5
OUExQjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLzsg
fTsKQEAgLTEzODYsNyArMTM5Myw3IEBACiAJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICov
OyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NjFE
NUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi87IH07CiAJCTUzRjZCRjZE
MUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMz
RjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1M0Y4RDIwMDFF
ODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2Fz
bVBsYW5JbmxpbmVzLmggKi87IH07CisJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNt
QkJRUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGluZXMuaCAq
LzsgfTsKIAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkwMDIyNzExRCAv
KiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTIxQ0YzODAz
OTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgKi87IH07CiAJCTUzRkQwNEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAg
Ki87IH07CkBAIC0zODU3LDYgKzM4NjQsOCBAQAogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0Mg
LyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEZC
MzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVdvcmtsaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENDgxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQ
bGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21PTUdQbGFu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENDkxRUE1ODFFNTAwNTI1
MjgxIC8qIFdhc21PTUdQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PTUdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2
NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNF
OTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNC
MTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODk2
LDEwICszOTA1LDE1IEBACiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bj
b2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21P
cGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0NBNzMwNzFF
QTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbUJCUVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJCUVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21BZGRyZXNzVmFsdWUu
aDsgcGF0aCA9IGIzL0IzV2FzbUFkZHJlc3NWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0Q0NDRERDFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1
ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1
bGVJbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTc3N0Uy
MUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzRTlFMEE5MUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGlu
ZVRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFOUUwQUEx
RUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtTWFjaGluZVRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGllclVwQ291bnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpT
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNlY3Rpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVu
Y3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZ1bmN0
aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zOTA5LDcgKzM5MjMs
NyBAQAogCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNt
TW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2
QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0Y4RDFGRjFFODM4
N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbUJCUVBsYW5JbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21CQlFQbGFuSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5
MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdD
b252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYzMzMsNiArNjM0
Nyw5IEBACiAJCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAq
LywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
ICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5o
ICovLAorCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8s
CisJCQkJNTNDQTczMDgxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggKi8sCisJCQkJ
NTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5oICovLAogCQkJ
CUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5jcHAgKi8sCiAJCQkJQUQ0
QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi8sCiAJCQkJNTI1QzBERDcx
RTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwICovLApAQCAtNjM0Nyw2ICs2MzY0LDgg
QEAKIAkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgKi8sCiAJ
CQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLywKIAkJCQk1M0Y0
MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCisJCQkJNTNF
OUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgKi8sCisJCQkJ
NTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovLAogCQkJ
CTc5MDA4MTM2MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxlLmNwcCAqLywKIAkJCQk3OTAw
ODEzNzFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5oICovLAogCQkJCTUzNTU1NzE1MUQ5
REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLywKQEAgLTYzNTcsNiArNjM3Niw4IEBA
CiAJCQkJNTNFNzc3RTIxRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
ICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNw
cCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5o
ICovLAorCQkJCTUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5jcHAgKi8s
CisJCQkJNTMxMUJENDkxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi8sCiAJCQkJ
QURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovLAogCQkJCTUz
ODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywK
IAkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
ICovLApAQCAtNjM2NiwxMiArNjM4NywxMiBAQAogCQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFC
NiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdh
c21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4u
aCAqLywKLQkJCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmgg
Ki8sCiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAog
CQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJ
CQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAogCQkJCTUy
NTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLywKIAkJCQk1MjUwRDJE
MDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAorCQkJCTUzRTlFMEFFMUVBRUM0
NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywKIAkJCQk1M0ZGN0Y5QTFEQkZEMkI5
MDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFEQkZDRDkwMDBB
MjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi8sCiAJCQkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOURE
IC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8sCkBAIC04OTA5LDYgKzg5MzAsNyBAQAogCQkJCTc5NkRB
QTJCMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRT
aGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFBODExMjAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQyQzE1QThD
QzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1
Niw3ICs5Mjc4LDcgQEAKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGOEQyMDAxRTgzODdENDAwRDIx
MTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGOEQyMDAxRTgz
ODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBL
ZXkuaCBpbiBIZWFkZXJzICovLApAQCAtOTMyMywxMCArOTM0NSwxMiBAQAogCQkJCUU0OURDMTZE
MTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0U5RTBBQzFFQUU4M0RG
MDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4
NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAvKiBTcGls
bFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRTlFMEFGMUVBRUM0NTcwMEZF
RTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0FDNzUyMTgz
RUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
REI3RTkxRDYxMjRCNTAwQ0RCRjhFIC8qIFN0YWNrRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QzFFQUYyMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuaCBpbiBIZWFkZXJzICov
LApAQCAtOTM3NCw2ICs5Mzk4LDcgQEAKIAkJCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyog
VGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM0MjIxMjFENkI4MUMzMDAz
MkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZE
RDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ0
QjFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21W
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA3OCw2ICsxMDEwMyw3IEBACiAJCQkJMEZFQzg1
MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjRCNENBMUU4ODlEN0IwMERCQkU4NiAvKiBCM1ZhcmlhYmxlTGl2ZW5lc3MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0NBNzMwOTFFQTUzM0Q4MDA3NjA0OUQg
LyogV2FzbUJCUVBsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwRkIzMDQxRTdBMTE0NjAw
M0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQyMkE2MjFD
MTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYzMzhERjUxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTEwMTgyLDYgKzEwMjA4LDcgQEAKIAkJCQkxNDdGMzlDMjEwN0VDMzc2
MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZGQzc1MDE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTMxMUJENEExRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25zb2xl
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDc5MTg5QjA1MTAwMDYzMzIzMSAv
KiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTU3MTRCRjFDRDgwNEE0
MDAwNEQyQzYgLyogQ29uc29sZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjY3LDYg
KzEwMjk0LDcgQEAKIAkJCQkwRjNCRDFCNzFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9u
U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzODFCOTM3MUU2MEU5NjYwMDkwRjc5NCAvKiBX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzAwQjdCMThB
QjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1M0U5RTBBQjFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJl
YWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODk4RjMxMUIyNzY4OUYwMDgzQTMzQyAvKiBE
RkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyog
REZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggMmViNDUx
ZDVkNDE3OTJlMjcyYWZiNDRmYWNlN2MwMmUzMGMyZDcyYy4uNzZlZGU1OTFiZDQ1ODE4NjY5M2Ri
MjBkZjMzMjE3NGZiZWI4YjJjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTUyMCw4ICs1MjAsMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgTGlua2FibGUgPSAweDEsCiAgICAgICAgICAgICBOZWFy
ID0gMHgyLAogICAgICAgICAgICAgVGFpbCA9IDB4NCwKKyAgICAgICAgICAgIFRocmVhZFNhZmUg
PSAweDgsCiAgICAgICAgICAgICBMaW5rYWJsZU5lYXIgPSAweDMsCiAgICAgICAgICAgICBMaW5r
YWJsZU5lYXJUYWlsID0gMHg3LAorICAgICAgICAgICAgVGhyZWFkU2FmZUxpbmthYmxlTmVhciA9
IDB4YgogICAgICAgICB9OwogCiAgICAgICAgIENhbGwoKQpAQCAtMTAxOCw2ICsxMDIwLDIyIEBA
IHB1YmxpYzoKICAgICAgICAgYnVmZmVyLnNldENvZGVTaXplKHRhcmdldENvZGVTaXplKTsKICAg
ICB9CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGd1YXJlbnRlZXMgdGhlIG5leHQgaW5zdHJ1Y3Rp
b25TaXplIGJ5dGVzIG9mIGluc3RydWN0aW9ucyB3aWxsIGJlIGluIHRoZSBzYW1lIGNhY2hlIGxp
bmUuCisgICAgdm9pZCBlbnN1cmVDYWNoZUxpbmVTcGFjZShzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlcGxhY2UgNjQgd2l0aCB0aGUgcmVhbCBjYWNo
ZWxpbmUgc2l6ZSBvbmNlIHdlIHN3aXRjaCB0byBDKysxNy4KKyAgICAgICAgY29uc3Qgc2l6ZV90
IGNhY2hlTGluZVNpemUgPSA2NDsKKyAgICAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZSA8PSBj
YWNoZUxpbmVTaXplKTsKKyAgICAgICAgc2l6ZV90IGNvZGVTaXplID0gbV9hc3NlbWJsZXIuY29k
ZVNpemUoKTsKKyAgICAgICAgYXV0byBjYWNoZUFsaWduZWRCZWZvcmUgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8Y2FjaGVMaW5lU2l6ZT4oY29kZVNpemUpOworICAgICAgICBhdXRvIGNhY2hl
QWxpZ25lZEFmdGVyID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPGNhY2hlTGluZVNpemU+KGNv
ZGVTaXplICsgaW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgaWYgKGNhY2hlQWxpZ25lZEJlZm9y
ZSA9PSBjYWNoZUFsaWduZWRBZnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBz
aXplX3QgbnVtYmVyT2ZOb3BzID0gY2FjaGVBbGlnbmVkQmVmb3JlIC0gY29kZVNpemU7CisgICAg
ICAgIGVtaXROb3BzKG51bWJlck9mTm9wcyk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoMCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IGExMTVl
YzNkNjQxZDVkYTVhNDllOTRkZTg3ZDNkZTdmZmFmZGM1OGUuLjg1N2QwYTlhZGQzMDM5ODUxYWIz
ZDczYjU0YTJmZjRmOGM5N2M3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Db2RlTG9jYXRpb24uaApAQCAtMTI1LDYgKzEyNSwxNyBAQCBwcml2YXRlOgogICAgIE5l
YXJDYWxsTW9kZSBtX2NhbGxNb2RlID0gTmVhckNhbGxNb2RlOjpSZWd1bGFyOwogfTsKIAorCisv
LyBUaGlzIGNsYXNzIGlzIGp1c3QgYSB3cmFwcGVyIHRoYXQgZm9yY2VzIHVzIHRvIGNhbGwgdGhl
IHRocmVhZCBzYWZlIHBhdGNoaW5nIGZ1bmN0aW9ucy4KK2NsYXNzIENvZGVMb2NhdGlvblRocmVh
ZFNhZmVOZWFyQ2FsbCB7CitwdWJsaWM6CisgICAgQ29kZUxvY2F0aW9uVGhyZWFkU2FmZU5lYXJD
YWxsKENvZGVMb2NhdGlvbk5lYXJDYWxsJiYgY2FsbCkKKyAgICAgICAgOiBuZWFyQ2FsbChzdGQ6
OmZvcndhcmQ8Q29kZUxvY2F0aW9uTmVhckNhbGw+KGNhbGwpKQorICAgIHsKKyAgICB9CisgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGw7Cit9OworCiBjbGFzcyBDb2RlTG9jYXRpb25E
YXRhTGFiZWwzMiA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewogcHVibGljOgogICAgIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbDMyKCkge30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggMDVlNzQwMDUxMzNlMTkz
NDIxNjE2NzllMjVhODA5MmMyMjUxMmY4ZS4uZjc2NGE5NGFmNjA5ZmVjZmJmNTVhM2RkNTRmNWQ2
MDU2YjkyNjkwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTMwODcsNiArMzA4NywxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBDYWxsKGxhYmVsLCBDYWxsOjpMaW5rYWJsZU5lYXJUYWlsKTsKICAgICB9
CiAKKyAgICBBTFdBWVNfSU5MSU5FIENhbGwgdGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJsKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1f
YXNzZW1ibGVyLmxhYmVsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAgfQorCiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJldCgpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaAppbmRleCBkY2Y4MDdlZjM0ZDBjZDg4ZDI0NzcwYmM5MTdlMzQ0YTJl
NTBkNzUzLi44ZWMwZWFkMmYyNTdmMmU0NGRhMGQ5YzMxNDc2ZjIzM2Q3MjFjZDhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oCkBAIC0yODQ0LDYgKzI4NDQsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CiAgICAgfQog
CisgICAgQ2FsbCB0aHJlYWRTYWZlTmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENh
bGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxsOjpUaHJlYWRTYWZlTGlua2FibGVOZWFyKTsKKyAg
ICB9CisKICAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewogICAgICAgICBy
ZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKHRhcmdldCksIENhbGw6Ok5vbmUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oCmluZGV4IDZlN2FkNWU4ZDdkZDc1NTY4NmE0NWFjOTZmMDJjYjFhZTQ1OTk2NGEuLjMxMzE4
MmU4Y2M2NjlkOWFlY2EzMTQyNzcxYjQzZjIzZDkxM2UzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTI0
Nyw2ICsyNDcsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbDo6ZnJvbVRhaWxKdW1w
KG5ld0p1bXApOwogICAgIH0KIAorICAgIENhbGwgdGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCkKKyAgICB7CisgICAgICAgIGNvbnN0IHNpemVfdCBuZWFyQ2FsbE9wY29kZVNpemUgPSAxOwor
ICAgICAgICBjb25zdCBzaXplX3QgbmVhckNhbGxSZWxhdGl2ZUxvY2F0aW9uU2l6ZSA9IHNpemVv
ZihpbnQzMl90KTsKKyAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIDMyLWJpdCBu
ZWFyIGNhbGwgaW1tZWRpYXRlIGlzIDMyLWJpdCBhbGlnbmVkLgorICAgICAgICBzaXplX3QgY29k
ZVNpemUgPSBtX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworICAgICAgICBzaXplX3QgYWxpZ25lZFNp
emUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8bmVhckNhbGxSZWxhdGl2ZUxvY2F0aW9uU2l6
ZT4oY29kZVNpemUgKyBuZWFyQ2FsbE9wY29kZVNpemUpOworICAgICAgICBlbWl0Tm9wcyhhbGln
bmVkU2l6ZSAtIChjb2RlU2l6ZSArIG5lYXJDYWxsT3Bjb2RlU2l6ZSkpOworICAgICAgICBEYXRh
TGFiZWxQdHIgbGFiZWwgPSBEYXRhTGFiZWxQdHIodGhpcyk7CisgICAgICAgIENhbGwgcmVzdWx0
ID0gbmVhckNhbGwoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChsYWJlbCwgZGlmZmVyZW5jZUJl
dHdlZW4obGFiZWwsIHJlc3VsdCkgPT0gKG5lYXJDYWxsT3Bjb2RlU2l6ZSArIG5lYXJDYWxsUmVs
YXRpdmVMb2NhdGlvblNpemUpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAg
ICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3Jj
LCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihkZXN0Lm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAppbmRleCAwNTQ2NTUzODIzYzliYzIxYzUz
NmVhMTQ0ZDA3OTUzNDgwNWNmY2RmLi41ZTEwMTM2YTdiMDc5MmY3Njc3YjdlNjUxZDgzNWIwYWJk
M2RlYzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRT
aHVmZmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmNwcApAQCAtODEsMTggKzgxLDE3IEBAIEJhbmsgU2h1ZmZsZVBhaXI6OmJhbmsoKSBjb25z
dAogICAgIHJldHVybiBGUDsKIH0KIAotT3Bjb2RlIFNodWZmbGVQYWlyOjpvcGNvZGUoKSBjb25z
dAotewotICAgIHJldHVybiBtb3ZlRm9yKGJhbmsoKSwgd2lkdGgoKSk7Ci19Ci0KIEluc3QgU2h1
ZmZsZVBhaXI6Omluc3QoQ29kZSogY29kZSwgVmFsdWUqIG9yaWdpbikgY29uc3QKIHsKICAgICBp
ZiAoVU5MSUtFTFkoc3JjKCkuaXNNZW1vcnkoKSAmJiBkc3QoKS5pc01lbW9yeSgpKSkgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb2RlKTsKLSAgICAgICAgcmV0dXJuIEluc3Qob3Bjb2RlKCks
IG9yaWdpbiwgc3JjKCksIGRzdCgpLCBjb2RlLT5uZXdUbXAoYmFuaygpKSk7CisgICAgICAgIHJl
dHVybiBJbnN0KG1vdmVGb3IoYmFuaygpLCB3aWR0aCgpKSwgb3JpZ2luLCBzcmMoKSwgZHN0KCks
IGNvZGUtPm5ld1RtcChiYW5rKCkpKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3Qob3Bjb2RlKCks
IG9yaWdpbiwgc3JjKCksIGRzdCgpKTsKKworICAgIGlmIChzcmMoKS5pc1NvbWVJbW0oKSkKKyAg
ICAgICAgcmV0dXJuIEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmJpZ0ltbShzcmMoKS52YWx1ZSgp
KSwgZHN0KCkpOworCisgICAgcmV0dXJuIEluc3QobW92ZUZvcihiYW5rKCksIHdpZHRoKCkpLCBv
cmlnaW4sIHNyYygpLCBkc3QoKSk7CiB9CiAKIHZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRW1pdFNodWZmbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1p
dFNodWZmbGUuaAppbmRleCBhYTE3ZGJiYTA5NjFiMzFiMWZlY2Y0NjBiNjJmZjExMWYxYTVhYjE5
Li5lNGQxYmQ4MTkxY2VmMmQyODhiMGU3MzlmNjMxY2E4YjNmM2E5OTZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCkBAIC03Myw4ICs3Myw3IEBA
IHB1YmxpYzoKICAgICBXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAg
ICAKICAgICBCYW5rIGJhbmsoKSBjb25zdDsKLSAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3Q7Ci0g
ICAgCisKICAgICAvLyBDcmVhdGVzIGFuIGluc3RydWN0aW9uIGZvciB0aGUgbW92ZSByZXByZXNl
bnRlZCBieSB0aGlzIHNodWZmbGUgcGFpci4gWW91IG5lZWQgdG8gcGFzcwogICAgIC8vIENvZGUg
aWYgdGhpcyBpcyBhIG1lbW9yeS0+bWVtb3J5IHBhaXIuIFlvdSBjYW4gcGFzcyBudWxsIGlmIHlv
dSBrbm93IHRoYXQgaXQncyBub3QuIEluCiAgICAgLy8gZmFjdCwgcGFzc2luZyBudWxsIGlzIGEg
Z29vZCB3YXkgdG8gYXNzZXJ0IHRoYXQgdGhpcyBpcyBub3QgYSBtZW1vcnktPm1lbW9yeSBwYWly
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAxODllNzk1YjY3MDJjY2JmYWU1NDQ5MWRhNGQzOTcw
MTJhYmViYjNhLi45YjVjY2FjMGJiOWM2MWQxNjExNzczNzJhZGI5YmViZTBmNmJkZjE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcApAQCAtNzgsNyArNzgsNyBAQAogI2luY2x1ZGUgIldhc21Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtQkJR
UGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlIDxsb2Nh
bGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTkxLDcgKzMxOTEsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25z
KEV4ZWNTdGF0ZSogZQogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gZnVuY3Rpb25D
b3VudCArIDIpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9
IGFkb3B0UmVmKCpuZXcgV2FzbTo6UGxhbih2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBXYXNtOjpQbGFuOjpGdWxsQ29tcGlsZSwg
V2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBSZWY8V2FzbTo6QkJRUGxhbj4gcGxh
biA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6QkJRUGxhbih2bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+
KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBXYXNtOjpCQlFQbGFuOjpGdWxs
Q29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICBXYXNtOjplbnN1cmVX
b3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgIFdhc206OmVuc3VyZVdvcmts
aXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdldCgpKTsKICAgICBpZiAocGxh
bi0+ZmFpbGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmlu
ZGV4IDYzMjJlNzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEzZGE1YzQxOTUxNjQuLmMxNzVhZTBjNDgy
ZWQyN2JkNWY2YmRjODc5NjhlNzVkNDVhZjUwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1By
b2ZpbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhy
ZWFkPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0Myw2ICsxNDQsOSBAQCB2b2lkIEpTTG9jazo6
ZGlkQWNxdWlyZUxvY2soKQogICAgIG1fdm0tPnNldExhc3RTdGFja1RvcCh0aHJlYWREYXRhLnNh
dmVkTGFzdFN0YWNrVG9wKCkpOwogCiAgICAgbV92bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFk
ZEN1cnJlbnRUaHJlYWQoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgV2FzbTo6c3Rh
cnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgogCiAgICAgbV92bS0+dHJhcHMoKS5u
b3RpZnlHcmFiQWxsTG9ja3MoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCmluZGV4IDA2ZDBmMGQ4ZDAwMzM2NmJlYjc2MDkzZGI3ZjFiM2Q3OGVmZmQyNWYuLmQ2NzI0
YzVhN2NkNmMwYjM1N2M0OTk3YjNhZTI5ZjU1ZDVkYjNmMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQzNCw3ICs0MzQsMTIgQEAgdHlwZWRlZiBjb25zdCBj
aGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgZmFpbFRvQ29tcGlsZVdlYkFz
c2VtYmx5Q29kZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIG5vIFdhc206OlBsYW4gd2lsbCBz
dWNlc3NmdWxseSBjb21waWxlIGEgZnVuY3Rpb24uIikgXAogICAgIHYoc2l6ZSwgd2ViQXNzZW1i
bHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3JtYWwsICJMaW1pdCBvbiB0aGUgbnVtYmVy
IG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBzaG91bGQgYXR0ZW1wdCBiZWZvcmUgY2hl
Y2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAotICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5QjNP
cHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAi
QjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNzZW1ibHkgbW9kdWxlcy4iKSBcCisgICAg
dih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCwgMSwgTm9ybWFsLCAi
QjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxh
dGlvbnMuIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2
ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9wdGltaXphdGlv
biBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwKKyAg
ICBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCwgNTAwMCwgTm9y
bWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4i
KSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVjcmVtZW50LCAxNSwgTm9ybWFs
LCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFj
aCBsb29wIGJhY2tlZGdlLiIpIFwKKyAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9u
RW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRk
b3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50cnkuIikgXAogICAgIFwKICAg
ICAvKiBGSVhNRTogZW5hYmxlIGZhc3QgbWVtb3JpZXMgb24gaU9TIGFuZCBwcmUtYWxsb2NhdGUg
dGhlbS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc3NCAqLyBc
CiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksICFpc0lPUygpLCBOb3JtYWws
ICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRo
IGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBj
NmQ0ODAwYzJhNWE5NjY4NDUzYWJlOGI4YTY0NDRlMjg5YjNjODhhLi5kYWE2YjVhNmJiNjY0Zjg0
OTAyYmQ5YTZkNDQyZjJhY2EwMTgxMjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAi
V2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKICNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRl
ICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogI2luY2x1ZGUg
PGxpbWl0cz4KQEAgLTE3NCw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
ZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAg
QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21J
bnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5
TW9kZSk7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2Nl
ZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCopOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTIyMywxMiArMjI0LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNv
bnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CiAgICAg
dm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBt
X3BhcnNlciA9IHBhcnNlcjsgfTsKIAotICAgIFZhbHVlKiBjb25zdGFudChCMzo6VHlwZSwgdWlu
dDY0X3QgYml0cyk7CisgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRz
LCBzdGQ6Om9wdGlvbmFsPE9yaWdpbj4gPSBzdGQ6Om51bGxvcHQpOwogICAgIHZvaWQgaW5zZXJ0
Q29uc3RhbnRzKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0Nh
bGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKKyAgICBCYXNpY0Jsb2NrKiBlbWl0VGllclVw
Q2hlY2soQmFzaWNCbG9jayogZW50cnksIHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBPcmlnaW4p
OworCiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAg
ICAgQjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKICAgICBFeHByZXNz
aW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVp
bnQzMl90IG9mZnNldCk7CkBAIC0yNDEsNyArMjQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIGludDMy
X3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5
cGUmLCB1aW50MzJfdCk7CiAKLSAgICBWYWx1ZSogbWF0ZXJpYWxpemVXYXNtQ29udGV4dChQcm9j
ZWR1cmUmLCBCYXNpY0Jsb2NrKik7CisgICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRleHQo
QmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJh
c2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYs
IEJhc2ljQmxvY2sqKTsKIApAQCAtMjQ5LDcgKzI1MiwxMSBAQCBwcml2YXRlOgogCiAgICAgRnVu
Y3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyOwogICAgIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBtX2luZm87Ci0gICAgTWVtb3J5TW9kZSBtX21vZGU7CisgICAgY29uc3QgTWVt
b3J5TW9kZSBtX21vZGU7CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25N
b2RlOworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleDsKKyAgICBjb25zdCBUaWVy
VXBDb3VudCogbV90aWVyVXA7CisKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAgICBCYXNpY0Js
b2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKQEAg
LTI3MiwxMCArMjc5LDEwIEBAIGludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1
c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAgcmV0dXJuIG9m
ZnNldDsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQo
UHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKK1ZhbHVlKiBCM0lSR2VuZXJhdG9y
OjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGlmICh1
c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBwb2ludGVyVHlw
ZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJs
b2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJUeXBlKCksIE9y
aWdpbigpKTsKICAgICAgICAgaWYgKENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoCkBAIC0yODgsNyArMjk1LDcgQEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6
Om1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9j
aykKIAogICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNt
Q29udGV4dCByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0
b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20g
dXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJl
Z2lzdGVyLgotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50
VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5y
ZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZh
bHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7CkBAIC0zMjYsOSArMzMzLDEyIEBAIHZvaWQg
QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNC
bG9jayogYmxvY2ssIFZhbHVlCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSkKK0Iz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24s
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKICAgICA6IG1faW5mbyhpbmZv
KQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlv
bk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fdGll
clVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogICAgICwgbV9jb25zdGFudElu
c2VydGlvblZhbHVlcyhtX3Byb2MpCkBAIC0zNzEsNyArMzgxLDkgQEAgQjNJUkdlbmVyYXRvcjo6
QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBw
cm9jZWR1cmUKIAogICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xv
Z3VlKCZjb21waWxhdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4o
KSwgbV9jdXJyZW50QmxvY2spOwogCi0gICAgbV9pbnN0YW5jZVZhbHVlID0gbWF0ZXJpYWxpemVX
YXNtQ29udGV4dChtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9
IGVtaXRUaWVyVXBDaGVjayhtX2N1cnJlbnRCbG9jaywgVGllclVwQ291bnQ6OmZ1bmN0aW9uRW50
cnlEZWNyZW1lbnQoKSwgT3JpZ2luKCkpOworCisgICAgbV9pbnN0YW5jZVZhbHVlID0gbWF0ZXJp
YWxpemVXYXNtQ29udGV4dChtX2N1cnJlbnRCbG9jayk7CiB9CiAKIHZvaWQgQjNJUkdlbmVyYXRv
cjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24m
IG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJs
b2NrKQpAQCAtNDE4LDEwICs0MzAsMTAgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RXhjZXB0
aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlvblR5cGUgdHlwZSkKICAgICB9KTsK
IH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNvbnN0YW50KEIzOjpUeXBlIHR5cGUsIHVpbnQ2
NF90IGJpdHMpCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Y29uc3RhbnQoQjM6OlR5cGUgdHlwZSwg
dWludDY0X3QgYml0cywgc3RkOjpvcHRpb25hbDxPcmlnaW4+IG1heWJlT3JpZ2luKQogewogICAg
IGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudFBvb2wuZW5zdXJlKFZhbHVlS2V5KG9wY29kZUZvckNv
bnN0YW50KHR5cGUpLCB0eXBlLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihiaXRzKSksIFsmXSB7Ci0g
ICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX3Byb2MuYWRkQ29uc3RhbnQob3JpZ2luKCksIHR5cGUs
IGJpdHMpOworICAgICAgICBWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZENvbnN0YW50KG1heWJl
T3JpZ2luID8gKm1heWJlT3JpZ2luIDogb3JpZ2luKCksIHR5cGUsIGJpdHMpOwogICAgICAgICBt
X2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmluc2VydFZhbHVlKDAsIHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfSk7CkBAIC00NDAsNyArNDUyLDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
VmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBlKHR5cGUpKTsKICAg
ICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2FsKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIGxv
Y2FsLCBhZGRDb25zdGFudCh0eXBlLCAwKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgY29uc3Rh
bnQodG9CM1R5cGUodHlwZSksIDAsIE9yaWdpbigpKSk7CiAgICAgfQogICAgIHJldHVybiB7IH07
CiB9CkBAIC04MTcsMjQgKzgyOSw1OSBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBC
M0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogICAgIHJl
dHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwogfQogCi1CM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkK
K0Jhc2ljQmxvY2sqIEIzSVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVjayhCYXNpY0Jsb2NrKiBl
bnRyeSwgdWludDMyX3QgZGVjcmVtZW50Q291bnQsIE9yaWdpbiBvcmlnaW4pCiB7Ci0gICAgcmV0
dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpU
b3BMZXZlbCwgbV9wcm9jLmFkZEJsb2NrKCkpOwotfQorICAgIGlmICghbV90aWVyVXApCisgICAg
ICAgIHJldHVybiBlbnRyeTsKIAotQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVy
YXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCi17Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRh
KG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9wcm9jLmFk
ZEJsb2NrKCkpOworICAgIEFTU0VSVChkZWNyZW1lbnRDb3VudCAlIDIgPT0gMCk7CisgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBhIHBhdGNocG9pbnQuCisgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICBBU1NFUlQobV90aWVyVXApOworICAgIFZh
bHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVwKSwgb3JpZ2luKTsKKyAgICBWYWx1ZSogb2xkQ291
bnREb3duID0gZW50cnktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQz
Miwgb3JpZ2luLCBjb3VudERvd25Mb2NhdGlvbik7CisgICAgVmFsdWUqIG5ld0NvdW50RG93biA9
IGVudHJ5LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU3ViLCBvcmlnaW4sIG9sZENvdW50RG93
biwgY29uc3RhbnQoSW50MzIsIGRlY3JlbWVudENvdW50LCBvcmlnaW4pKTsKKyAgICBlbnRyeS0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4sIG5ld0NvdW50RG93
biwgY291bnREb3duTG9jYXRpb24pOworCisgICAgVmFsdWUqIHVuZGVyRmxvd2VkID0gZW50cnkt
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZSwgb3JpZ2luLCBuZXdDb3VudERvd24sIG9s
ZENvdW50RG93bik7CisKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIHRpZXJVcCA9IG1fcHJv
Yy5hZGRCbG9jaygpOworICAgICAgICBlbnRyeS0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIz
OjpCcmFuY2gsIG9yaWdpbiwgdW5kZXJGbG93ZWQpOworICAgICAgICBlbnRyeS0+c2V0U3VjY2Vz
c29ycyhGcmVxdWVudGVkQmxvY2sodGllclVwLCBGcmVxdWVuY3lDbGFzczo6UmFyZSksIEZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgICAgICB0aWVyVXAtPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4sIEVmZmVjdHM6OmZvckNhbGwoKSwK
KyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KHJ1bk9NR1BsYW5Gb3JJbmRleCksIG9yaWdpbiksCisgICAgICAgICAgICBtYXRlcmlh
bGl6ZVdhc21Db250ZXh0KHRpZXJVcCksCisgICAgICAgICAgICBjb25zdGFudChJbnQzMiwgbV9m
dW5jdGlvbkluZGV4LCBvcmlnaW4pKTsKKworICAgICAgICB0aWVyVXAtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbiwgY29udGludWF0aW9uKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gY29udGludWF0aW9uOwogfQogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBC
M0lSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQogewotICAgIEJhc2ljQmxvY2sq
IGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBicmFuY2hUYXJnZXQg
PSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3By
b2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBib2R5ID0gZW1pdFRpZXJVcENoZWNrKGJy
YW5jaFRhcmdldCwgVGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCiAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9y
aWdpbigpLCBib2R5KTsKLSAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7
CisKICAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1f
cHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24s
IGJvZHkpOworICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1
cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBicmFuY2hUYXJnZXQpOworfQorCitC
M0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBl
IHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwg
c2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX3Byb2MuYWRkQmxvY2soKSk7Cit9CisK
K0IzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZEJsb2NrKFR5cGUg
c2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBz
aWduYXR1cmUsIEJsb2NrVHlwZTo6QmxvY2ssIG1fcHJvYy5hZGRCbG9jaygpKTsKIH0KIAogYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2ln
bmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC05NzQsOSAr
MTAyMSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZSgpKTsKICAg
ICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVh
ckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5h
cHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7CkBAIC0xMDI2LDkgKzEwNzMsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAKICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNh
bGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBl
bmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7
CkBAIC0xMDk0LDcgKzExNDEsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KE9CSkVDVF9PRkZT
RVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBjb2RlKSkpOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxl
ZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNU
X09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIGNvZGUpKSkpOworCiAKICAgICBUeXBlIHJldHVy
blR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAgIHJlc3VsdCA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwg
YXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCkBAIC0xMTU4LDcgKzEyMDgsNyBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFj
aywgY29uc3QgRXhwcmVzcwogICAgIGRhdGFMb2dMbigpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVh
dGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUpCitzdGF0
aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxh
dGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2Rl
IG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQg
PSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIApAQCAtMTMxMyw3ICsxMzYz
LDEzIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRl
eHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRP
Zk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgfQogCi0gICAgY29tcGlsYXRpb25Db250ZXh0
LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsID0gaml0LmNhbGwoKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsK
KyAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5p
bXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGlu
Zm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNl
IH0pOworICAgIH0pOworCiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0
T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRP
ZmZzZXQucmVnKCkuZ3ByKCk7CkBAIC0xMzM5LDEwICsxMzk1LDEyIEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgV2FzbUluCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiB7Ci0g
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KE9wY29kZU9yaWdpbihtX3BhcnNlci0+Y3Vy
cmVudE9wY29kZSgpLCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpKTsK
KyAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFy
c2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgQVNTRVJUKGlzVmFsaWRP
cFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4ob3JpZ2luLm9wY29kZSgpKSkpOworICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21w
aWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rp
b25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWdu
ZWQgb3B0TGV2ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0
aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9u
TGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBh
dXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbUludGVybmFsRnVuY3Rpb24+KCk7CiAK
QEAgLTEzNjIsOSArMTQyMCwxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdAogICAgIC8vIG9w
dExldmVsPTEuCiAgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7CiAg
ICAgCi0gICAgcHJvY2VkdXJlLnNldE9wdExldmVsKG9wdExldmVsKTsKKyAgICBwcm9jZWR1cmUu
c2V0T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZQor
ICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQorICAg
ICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAg
ICBCM0lSR2VuZXJhdG9yIGNvbnRleHQoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQo
aW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBt
b2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAgICAgRnVuY3Rp
b25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCkBAIC0xMzg1LDcgKzE0NDUsOCBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShDb21waWxhdAogICAgICAgICByZXN1bHQtPndhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CiAg
ICAgfQogCi0gICAgY3JlYXRlSlNUb1dhc21XcmFwcGVyKGNvbXBpbGF0aW9uQ29udGV4dCwgKnJl
c3VsdCwgc2lnbmF0dXJlLCBpbmZvLCBtb2RlKTsKKyAgICBpZiAoY29tcGlsYXRpb25Nb2RlID09
IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSkKKyAgICAgICAgY3JlYXRlSlNUb1dhc21XcmFwcGVy
KGNvbXBpbGF0aW9uQ29udGV4dCwgKnJlc3VsdCwgc2lnbmF0dXJlLCBpbmZvLCBtb2RlLCBmdW5j
dGlvbkluZGV4LCAmdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOwogICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCmluZGV4IDFlYzEwMWZlMzMxOTZjNTRiMWMwM2E5ZTM0Mjc5OThkMjVmMmQyYTIu
Ljc2MjJkYmVjZGViZDdjMzZiZmFjNGNkOTg5MmM2Nzc2N2MwNTYxYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtMjksOSArMjksMTEg
QEAKIAogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgor
I2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRp
b24uaCIKKyNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0
ZWQuaD4KIAogZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwpAQCAtNDAsMTUg
KzQyLDE5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9y
eUluZm9ybWF0aW9uOwogCitlbnVtIGNsYXNzIENvbXBpbGF0aW9uTW9kZSB7CisgICAgQkJRTW9k
ZSwKKyAgICBPTUdNb2RlLAorfTsKKwogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVycz4ganNFbnRyeXBvaW50SklUOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4ganNFbnRyeXBvaW50Qnlwcm9kdWN0czsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlw
cm9kdWN0czsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlw
b2ludENhbGw7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVuc2ln
bmVkIG9wdExldmVsKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGls
YXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRy
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzMDFmNTE2NzM3MjBiN2U2MDU3ODMx
NWJhMTY0ODRkOWM0MjY4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2FzbUJCUVBsYW4uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1
ZGUgIldhc21CaW5kaW5nLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldh
c21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5o
IgorI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgorI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5o
IgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK0JCUVBsYW46OkJCUVBsYW4oVk0mIHZt
LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9u
VGFzayYmIHRhc2spCisgICAgOiBCYXNlKHZtLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2sp
KQorICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQorICAgICwgbV9hc3luY1dvcmsod29y
aykKK3sKK30KKworQkJRUGxhbjo6QkJRUGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNv
dXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IEJCUVBs
YW4odm0sIG1ha2VSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwg
d29yaywgV1RGTW92ZSh0YXNrKSkKK3sKKyAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7Cit9
CisKK0JCUVBsYW46OkJCUVBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVf
dCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisg
ICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKKyAgICAs
IG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQoreworfQor
Citjb25zdCBjaGFyKiBCQlFQbGFuOjpzdGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSkKK3sKKyAgICBz
d2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFs
IjsKKyAgICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6IHJldHVybiAiVmFsaWRhdGVkIjsKKyAgICBj
YXNlIFN0YXRlOjpQcmVwYXJlZDogcmV0dXJuICJQcmVwYXJlZCI7CisgICAgY2FzZSBTdGF0ZTo6
Q29tcGlsZWQ6IHJldHVybiAiQ29tcGlsZWQiOworICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDog
cmV0dXJuICJDb21wbGV0ZWQiOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIEJCUVBsYW46Om1vdmVUb1N0YXRlKFN0YXRlIHN0YXRlKQoreworICAg
IEFTU0VSVChzdGF0ZSA+PSBtX3N0YXRlKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlICYmIHN0
YXRlICE9IG1fc3RhdGUsICJtb3ZpbmcgdG8gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKHN0YXRlKSwg
IiBmcm9tIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhtX3N0YXRlKSk7CisgICAgbV9zdGF0ZSA9IHN0
YXRlOworfQorCitib29sIEJCUVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQoreworICAg
IGlmIChtX3N0YXRlICE9IFN0YXRlOjpJbml0aWFsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdGFydGluZyB2YWxpZGF0aW9uIik7CisgICAgTW9u
b3RvbmljVGltZSBzdGFydFRpbWU7CisgICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0
Q29tcGlsZVRpbWVzKCkpCisgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
OworCisgICAgeworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fc291cmNlLCBt
X3NvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CisgICAgICAgIGF1dG8gcGFyc2VS
ZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKKyAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkg
eworICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBXVEZNb3ZlKHBhcnNl
UmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OworICAgIGZvciAodW5zaWduZWQgZnVu
Y3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7
ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vz
c2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25J
bmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rp
b25JbmRleF0uZW5kKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1f
c291cmNlICsgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAg
IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhd
LmVuZCAtIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBB
U1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOworICAgICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOworCisgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24o
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQ
b2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uU3RhcnRbaV0pKSwgIiwgIik7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3Vs
dC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5j
dGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSB8fCBP
cHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIs
IChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMg
dG8gdmFsaWRhdGUgbW9kdWxlIik7CisKKyAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6VmFsaWRhdGVk
KTsKKyAgICBpZiAobV9hc3luY1dvcmsgPT0gVmFsaWRhdGlvbikKKyAgICAgICAgY29tcGxldGUo
aG9sZExvY2sobV9sb2NrKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQkJRUGxhbjo6
cHJlcGFyZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OlZhbGlkYXRlZCk7Cisg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIHByZXBhcmF0aW9uIik7CisKKyAgICBh
dXRvIHRyeVJlc2VydmVDYXBhY2l0eSA9IFt0aGlzXSAoYXV0byYgdmVjdG9yLCBzaXplX3Qgc2l6
ZSwgY29uc3QgY2hhciogd2hhdCkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXZlY3Rvci50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkZhaWxlZCBhbGxvY2F0aW5n
IGVub3VnaCBzcGFjZSBmb3IgIik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihz
aXplKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHdoYXQpOworICAgICAgICAgICAgZmFp
bChob2xkTG9jayhtX2xvY2spLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKKyAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dh
c21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIp
CisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdl
YkFzc2VtYmx5IGNhbGxzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21J
bnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5
IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlv
bkNvbnRleHRzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4
dHMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdGllclVwQ291bnRzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlv
bnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25M
b2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0
aW9uTG9jYXRpb25zLnNpemUoKSk7CisgICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsg
aW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBv
cnRJbmRleCkgeworICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9u
LT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKKyAgICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRl
cm5hbEtpbmQ6OkZ1bmN0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVuc2ln
bmVkIGltcG9ydEZ1bmN0aW9uSW5kZXggPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOwor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24g
bnVtYmVyICIsIGltcG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5t
b2R1bGUpLCAiOiAiLCBtYWtlU3RyaW5nKGltcG9ydC0+ZmllbGQpKTsKKyAgICAgICAgbV93YXNt
VG9XYXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZCh3YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9u
SW5kZXgpKTsKKyAgICB9CisKKyAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6UHJlcGFyZWQpOworfQor
CisvLyBXZSBkb24ndCBoYXZlIGEgc2VtYXBob3JlIGNsYXNzLi4uIGFuZCB0aGlzIGRvZXMga2lu
ZGEgaW50ZXJlc3RpbmcgdGhpbmdzLgorY2xhc3MgQkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXIg
eworcHVibGljOgorICAgIFRocmVhZENvdW50SG9sZGVyKEJCUVBsYW4mIHBsYW4pCisgICAgOiBt
X3BsYW4ocGxhbikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xv
Y2spOworICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKKyAgICB9CisK
KyAgICB+VGhyZWFkQ291bnRIb2xkZXIoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9wbGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFk
cy0tOworCisgICAgICAgIGlmICghbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzICYmICFt
X3BsYW4uaGFzV29yaygpKQorICAgICAgICAgICAgbV9wbGFuLmNvbXBsZXRlKGxvY2tlcik7Cisg
ICAgfQorCisgICAgQkJRUGxhbiYgbV9wbGFuOworfTsKKwordm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK3sKKyAgICBBU1NFUlQobV9zdGF0
ZSA+PSBTdGF0ZTo6UHJlcGFyZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGlu
ZyBjb21waWxhdGlvbiIpOworCisgICAgaWYgKCFoYXNXb3JrKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFRyYWNlU2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2Vi
QXNzZW1ibHlDb21waWxlRW5kKTsKKyAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMp
OworCisgICAgc2l6ZV90IGJ5dGVzQ29tcGlsZWQgPSAwOworICAgIGNvbnN0IGF1dG8mIGZ1bmN0
aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChlZmZvcnQgPT0gUGFydGlhbCAm
JiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlhbENvbXBpbGVMaW1p
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXg7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5z
aXplKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzV29yaygpKQorICAgICAgICAgICAgICAg
ICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGlsZWQpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXggPSBtX2N1cnJlbnRJ
bmRleDsKKyAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxvY2F0
aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
ID0gZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2NhdGlv
bnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8
PSBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5j
dGlvbkluZGV4OworICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBBU1NFUlQodmFs
aWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisKKyAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigp
OworICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9u
SW5kZXhdOworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29t
cGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQs
IGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVu
Y3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOworCisgICAgICAgIGlmIChV
TkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgeworICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZSkg
eworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGNvbXBpbGVzIGNvdWxkIGZhaWwgc2ltdWx0
YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QuCisgICAgICAgICAgICAg
ICAgZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCks
ICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgp
KSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fY3VycmVudEluZGV4ID0gZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOworICAg
ICAgICBieXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgIH0KK30KKwordm9pZCBC
QlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQoreworICAgIEFT
U0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgQ29tcGxldGlvbiIpOworCisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7CisgICAgICAgIGZvciAodWludDMyX3QgZnVuY3Rp
b25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKKyAgICAgICAgICAg
IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAg
ICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisg
ICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJs
eSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCisgICAgICAg
ICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAg
ICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2Fz
bUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlv
bj4oCisgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJKYXZh
U2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmpzRW50cnlw
b2ludEJ5cHJvZHVjdHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CisgICAgICAg
ICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1bmxpbmtlZCkgeworICAgICAgICAgICAgICAgIHZvaWQq
IGV4ZWN1dGFibGVBZGRyZXNzOworICAgICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0
aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNv
dWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNo
cG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNT
RVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAg
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJz
LmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFk
ZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFj
ZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSktPndhc21FbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChleGVjdXRhYmxlQWRkcmVzcykpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghaXNDb21wbGV0ZSgpKSB7CisgICAgICAg
IG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOworICAgICAgICBydW5Db21wbGV0aW9uVGFz
a3MobG9ja2VyKTsKKyAgICB9Cit9CisKK3ZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU3Rh
dGU6OkluaXRpYWw6CisgICAgICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CisgICAg
ICAgICAgICBpZiAoIWhhc1dvcmsoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc0NvbXBs
ZXRlKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEZBTExUSFJPVUdIOworICAgICAgICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6CisgICAgICAg
ICAgICBwcmVwYXJlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RhdGU6
OlByZXBhcmVkOgorICAgICAgICAgICAgY29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUzNzI2YzdiYzAzNGRmYTVjYmEzYjAyMTIzNWM1YWJkZjQ2NzQ4
OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1h
dGlvbi5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50
LmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtJbmZvOworY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CitjbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKKworbmFtZXNwYWNlIFdhc20g
eworCitjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4geworcHVibGljOgorICAgIHVz
aW5nIEJhc2UgPSBQbGFuOworICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21w
aWxlLCBWYWxpZGF0aW9uIH07CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgorICAgIEJCUVBsYW4oVk0mLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+
LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYm
KTsKKyAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYg
eW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1
bmN0aW9uIHRlc3RzCisgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBvZiBmdW5jdGlvbiB0
ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29uc3RydWN0b3IuCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qs
IEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisKKyAgICBib29sIHBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOworICAg
IHZvaWQgY29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCk7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVu
Y3RvciYpOworCisgICAgVmVjdG9yPEV4cG9ydD4mIGV4cG9ydHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICBy
ZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0czsKKyAgICB9CisKKyAgICBzaXplX3Qg
aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5m
b3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25Db3VudCgpOworICAgIH0KKworICAgIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3JtYXRpb24oKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4g
V1RGTW92ZShtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CisKKyAgICBCYWc8Q2FsbExpbmtJ
bmZvPiYmIHRha2VDYWxsTGlua0luZm9zKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9jYWxs
TGlua0luZm9zKTsKKyAgICB9CisKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiYm
IHRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNt
VG9XYXNtRXhpdFN0dWJzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBX
VEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOworICAgIH0KKworICAgIFZlY3RvcjxU
aWVyVXBDb3VudD4gdGFrZVRpZXJVcENvdW50cygpCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1f
dGllclVwQ291bnRzKTsKKyAgICB9CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7
CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIFZhbGlkYXRlZCwKKyAgICAgICAgUHJlcGFyZWQs
CisgICAgICAgIENvbXBpbGVkLAorICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkg
bW92ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCisgICAgfTsKKwor
ICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9h
c3luY1dvcmsgPT0gQXN5bmNXb3JrOjpWYWxpZGF0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGUgPCBTdGF0ZTo6VmFsaWRhdGVkOworICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRl
OjpDb21waWxlZDsKKyAgICB9CisgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVy
cmlkZTsKKyAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
Pj0gU3RhdGU6OlByZXBhcmVkOyB9CisgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gaGFzQmVlblByZXBhcmVkKCk7IH0KKworcHJpdmF0ZToKKyAgICBjbGFz
cyBUaHJlYWRDb3VudEhvbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRIb2xkZXI7
CisgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFy
ZW50IGNsYXNzZXMuLi4KKyAgICB1c2luZyBCYXNlOjptX2xvY2s7CisKKyAgICB2b2lkIG1vdmVU
b1N0YXRlKFN0YXRlKTsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQ7IH0KKyAgICB2b2lkIGNvbXBsZXRlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJikgb3ZlcnJpZGU7CisKKyAgICBjb25zdCBjaGFyKiBzdGF0ZVN0
cmluZyhTdGF0ZSk7CisgICAgCisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9z
OworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHVi
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPj4gbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9j
b21waWxhdGlvbkNvbnRleHRzOworICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3Vu
dHM7CisKKyAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzOworICAgIFN0YXRlIG1fc3RhdGU7CisKKyAgICBjb25zdCBBc3lu
Y1dvcmsgbV9hc3luY1dvcms7CisgICAgdWludDhfdCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7
IDAgfTsKKyAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleCB7IDAgfTsKK307CisKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWUwN2MzYjFiZDVkYWVkOGVhODNmOTVhNmY1ODVmZjExMmQ5NGUyZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5o
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkNhbGxlZUJpdHMuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2Fz
bUJCUVBsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29u
c3QgRnVuY3RvciYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5k
ZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbklu
ZGV4KSB7CisgICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7CisKKyAgICAgICAg
UmVmPFdhc206OkNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVh
dGUoV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oanNFbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CisK
KyAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3Zl
TG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkp
KTsKKworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNF
bnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAppbmRl
eCBlODcwZGVmMmExNzA0YzAyM2Y2Njc1ZDk4MDViMDkwMWRlMzllNmMyLi41NDM1MjkzODdmZjc5
MzlhODIwYzJlOTA0MTY3NjdhMDcxNDcxNWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCkBAIC00NTUsNyArNDU1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgfQogCiAgICAgLy8gVGFp
bCBjYWxsIGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBqaXQubG9h
ZFB0cihKSVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZX
YXNtRW50cnlwb2ludCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24oKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gp
OwogICAgIGppdC5qdW1wKHNjcmF0Y2gpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVl
LmgKaW5kZXggMDk4NzdlZDAwNDk5MzQxZTZlZThmZDgxZmViMTQwYjk4NzUzZjYzNC4uOTgzNjJm
MzI5ZmJmMDdmNWQxMzc3ZDljOTEwOTdhNmZhZGJkNjY1MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVy
QXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgpAQCAtNDMsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqY2FsbGVlKTsKICAgICB9CiAKLSAgICB2b2lkKiBlbnRyeXBvaW50
KCkgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsgfQorICAgIHZvaWQqIGVudHJ5cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAKICAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2Vu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDhiZjNhZjRlYzgxMzQ4YmQwYTZiYTEzYTI0
MmY2ZTYwNzI2Yjk2MTcuLmJjYTA0YTRlMmNiNTMwZTQxMWQwMzJkOWRlNjdkYTVhZjM4OGY5Y2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0z
MCw3ICszMCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNh
bGxlZS5oIgotI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21CQlFQ
bGFuSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNDAsNyArNDAsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9y
bWF0aQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVj
dGVkVGhpcyA9IHRoaXM7Ci0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtYWtl
UmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRh
c2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyldIChWTSYsIFBsYW4mKSB7CisgICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBC
QlFQbGFuKHZtLCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBp
bGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChWTSYsIFBsYW4mKSB7CiAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVk
KCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3NhZ2Uo
KTsKQEAgLTQ4LDEzICs0OCwyMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIE1lbW9y
eU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxl
ZUNvdW50ICogMik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xs
ZWN0IHRoZSBCQlEgY29kZS4KKyAgICAgICAgbV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50
KTsKKyAgICAgICAgbV9qc0NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICBt
X29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICBtX3dhc21F
bnRyeVBvaW50cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisKICAgICAgICAgbV9wbGFuLT5pbml0
aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWY8V2FzbTo6Q2FsbGVl
PiYmIGpzRW50cnlwb2ludENhbGxlZSwgUmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2lu
dENhbGxlZSkgewotICAgICAgICAgICAgbV9jYWxsZWVzW2NhbGxlZUluZGV4XSA9IFdURk1vdmUo
anNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleCAr
IG1fY2FsbGVlQ291bnRdID0gV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAg
ICAgICBtX2pzQ2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxl
ZSk7CisgICAgICAgICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92ZSh3YXNtRW50
cnlwb2ludENhbGxlZSk7CisgICAgICAgICAgICBtX3dhc21FbnRyeVBvaW50c1tjYWxsZWVJbmRl
eF0gPSBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdLT5lbnRyeXBvaW50KCk7CiAgICAgICAgIH0pOwog
CiAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21F
eGl0U3R1YnMoKTsKKyAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtl
V2FzbVRvV2FzbUNhbGxzaXRlcygpOworICAgICAgICBtX3RpZXJVcENvdW50cyA9IG1fcGxhbi0+
dGFrZVRpZXJVcENvdW50cygpOwogCiAgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7CiAgICAgfSkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAppbmRleCBkYjlh
ODkxN2JhOGUxZGE4YWNkOGYxOGUxZGQzMDg2MTY1ZTIxZGU2Li41NDRlNmQ2YjQwODhmMTcxOGJk
MDJiZWJlNjVhNzU4NmIyZWQyNzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVCbG9jay5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbVRpZXJV
cENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KQEAgLTQxLDggKzQyLDExIEBAIGNsYXNzIFZN
OwogbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBDYWxsZWU7Ci1jbGFzcyBQbGFuOworY2xhc3Mg
QkJRUGxhbjsKK2NsYXNzIE9NR1BsYW47CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CitzdHJ1
Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKK3R5cGVkZWYgdm9pZCoqIFdhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uOwogZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdDsKICAgICAKIGNs
YXNzIENvZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+IHsK
QEAgLTc1LDMwICs3OSw1MiBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9y
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKTsgfQog
Ci0gICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBDYWxsZWUmIGpzRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1
bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVu
Y3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICByZXR1cm4gKm1f
anNDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICB9CisgICAgQ2FsbGVlJiB3YXNtRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNl
ID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4
ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAgICAgICBp
ZiAobV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKKyAgICAgICAgICAgIHJldHVybiAq
bV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJuICpt
X2NhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAgIH0KLSAgICBXYXNtOjpDYWxsZWUmIHdh
c21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCisKKyAgICBXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNw
YWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUlu
ZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBy
ZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOworICAg
ICAgICByZXR1cm4gJm1fd2FzbUVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XTsKICAgICB9CisKKyAg
ICBUaWVyVXBDb3VudCYgdGllclVwQ291bnQodWludDMyX3QgZnVuY3Rpb25JbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XTsKKyAgICB9CisK
ICAgICBib29sIGlzU2FmZVRvUnVuKE1lbW9yeU1vZGUpOwogCisgICAgTWVtb3J5TW9kZSBtb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisKICAgICB+Q29kZUJsb2NrKCk7CiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOworCiAgICAgQ29kZUJsb2NrKFZNJiwgTWVtb3J5
TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mKTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50Owog
ICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxs
ZWVzOworICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOworICAg
IFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9qc0NhbGxlZXM7CisgICAgVmVjdG9yPHZvaWQqPiBt
X3dhc21FbnRyeVBvaW50czsKKyAgICBWZWN0b3I8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnRz
OworICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2Fz
bUNhbGxzaXRlczsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dh
c21FeGl0U3R1YnM7Ci0gICAgUmVmUHRyPFBsYW4+IG1fcGxhbjsKKyAgICBSZWZQdHI8QkJRUGxh
bj4gbV9wbGFuOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBMb2NrIG1fbG9jazsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggNjdmNzA1NjVj
MDAwMGIzNTI3NWM5Zjg2ZDQzNGE2NGJiNzU3MjE1OS4uZjE3ZGUyODFkOTIxZTc3YWVlY2E1NmMx
YmFhZDBlMDJhZGEwMTU1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVk
ZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgIkNvZGVM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTQ2LDYgKzQ1LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0Z1bmN0aW9uOwogCisgICAgbmFtZXNwYWNlIEIzIHsK
KyAgICAgICAgY2xhc3MgQ29tcGlsYXRpb247CisgICAgfQorCiBuYW1lc3BhY2UgV2FzbSB7CiAK
IGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKQEAgLTIzMyw4ICsyMzYsOCBAQCBz
dHJ1Y3QgQ3VzdG9tU2VjdGlvbiB7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bCB7Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsTG9jYXRpb247Ci0gICAgc2l6ZV90IGZ1bmN0
aW9uSW5kZXg7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0aW9uOworICAgIHNp
emVfdCBmdW5jdGlvbkluZGV4U3BhY2U7CiB9OwogCiBzdHJ1Y3QgRW50cnlwb2ludCB7CkBAIC0y
NTUsMjAgKzI1OCwyNCBAQCBzdHJ1Y3QgV2FzbUV4aXRTdHVicyB7CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHdhc21Ub1dhc207CiB9OwogCit0eXBlZGVmIHZvaWQqKiBXYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbjsKKwogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2lu
ZGlyZWN0IHVzZSBpbmRpY2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFj
ZSBzdGFydHMgd2l0aCBhbGwgaW1wb3J0cywgYW5kIHRoZW4gYWxsIGludGVybmFsIGZ1bmN0aW9u
cy4KIC8vIENhbGxhYmxlRnVuY3Rpb24gYW5kIEZ1bmN0aW9uSW5kZXhTcGFjZSBhcmUgb25seSBt
ZWFudCBhcyBmYXN0IGxvb2t1cCB0YWJsZXMgZm9yIHRoZXNlIG9wY29kZXMsIGFuZCBkbyBub3Qg
b3duIGNvZGUuCiBzdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbiB7CiAgICAgQ2FsbGFibGVGdW5jdGlv
bigpID0gZGVmYXVsdDsKIAotICAgIENhbGxhYmxlRnVuY3Rpb24oU2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXgsIHZvaWQqIGNvZGUgPSBudWxscHRyKQorICAgIENhbGxhYmxlRnVuY3Rpb24o
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IGNvZGUgPSBudWxscHRyKQogICAgICAgICA6IHNpZ25hdHVyZUluZGV4KHNpZ25hdHVyZUluZGV4
KQogICAgICAgICAsIGNvZGUoY29kZSkKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIGNvZGUpOyB9CisKICAgICAvLyBGSVhNRSBwYWNr
IHRoZSBTaWduYXR1cmVJbmRleCBhbmQgdGhlIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQg
dmFsdWUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTEKICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4
IH07Ci0gICAgdm9pZCogY29kZSB7IG51bGxwdHIgfTsKKyAgICBXYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiBjb2RlIHsgbnVsbHB0ciB9OwogfTsKIHR5cGVkZWYgVmVjdG9yPENhbGxhYmxlRnVu
Y3Rpb24+IEZ1bmN0aW9uSW5kZXhTcGFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFhYzg3YWNiNTc0N2M3
ZmNhMmY5MzZlYzljZjY3OGI0MzE3ODE3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKworaW5saW5lIE1hY2hpbmVUaHJl
YWRzJiB3YXNtVGhyZWFkcygpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNo
aW5lVGhyZWFkcz4gdGhyZWFkczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIHRocmVhZHMuY29uc3RydWN0KCk7
CisgICAgfSk7CisKKyAgICByZXR1cm4gdGhyZWFkczsKK30KKwordm9pZCBzdGFydFRyYWNraW5n
Q3VycmVudFRocmVhZCgpCit7CisgICAgd2FzbVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7
Cit9CisKK3ZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHdhc21UaHJlYWRzKCkuZ2V0TG9jaygpKTsKKworICAgIGNv
bnN0IERvdWJseUxpbmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJl
YWRzID0gd2FzbVRocmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8qIHRocmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVh
ZC0+bmV4dCgpKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCks
IFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KikgeworICAgICAgICAgICAgLy8gSXQncyBsaWtl
bHkgdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBhbHJlYWR5IHJlc2V0IHRoZSBpbnN0cnVj
dGlvbiBjYWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBzdXJlLgorICAgICAgICAgICAgV1RG
Ojpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKKyAg
ICAKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGlu
ZVRocmVhZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFk
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZiYzhkN2E2ODNiOTRiOTAxZTk0NDRlZTNkZmVjYzhkNGFlNTFiZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGlu
ZVRocmVhZHMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJXYXNtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgor
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordm9pZCBzdGFydFRyYWNr
aW5nQ3VycmVudFRocmVhZCgpOworCit2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhy
ZWFkcygpOworICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5j
cHAKaW5kZXggNWMxODc2MzJiY2JjOTAxMDA3MmE5MGFjYWQ0ODViYTU0ZTk5NmMyZS4uZDBlZWRi
NDM4MjljYzM2NGE4NzE2YWJhYTU2NTk3ZDkzYjRmOGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRl
ICJXYXNtUGxhbklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNp
bmNsdWRlICJXYXNtV29ya2xpc3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKQEAgLTQ2LDcgKzQ2LDcgQEAgV2FzbTo6U2lnbmF0dXJlSW5kZXggTW9kdWxlOjpzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3QKICAgICByZXR1cm4g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiB9CiAKLXN0YXRpYyBNb2R1bGU6OlZhbGlkYXRpb25SZXN1
bHQgbWFrZVZhbGlkYXRpb25SZXN1bHQoUGxhbiYgcGxhbikKK3N0YXRpYyBNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQgbWFrZVZhbGlkYXRpb25SZXN1bHQoQkJRUGxhbiYgcGxhbikKIHsKICAgICBB
U1NFUlQoIXBsYW4uaGFzV29yaygpKTsKICAgICBpZiAocGxhbi5mYWlsZWQoKSkKQEAgLTU4LDIw
ICs1OCwyMCBAQCBzdGF0aWMgUGxhbjo6Q29tcGxldGlvblRhc2sgbWFrZVZhbGlkYXRpb25DYWxs
YmFjayhNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYQogewogICAgIHJldHVybiBjcmVhdGVT
aGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChWTSYgdm0sIFBsYW4mIHBsYW4pIHsKICAgICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmso
KSk7Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4odm0sIG1ha2VWYWxpZGF0aW9uUmVzdWx0KHBsYW4p
KTsKKyAgICAgICAgY2FsbGJhY2stPnJ1bih2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGlj
X2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CiAgICAgfSk7CiB9CiAKIE1vZHVsZTo6VmFsaWRhdGlv
blJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNv
dXJjZSkKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgV1RG
TW92ZShzb3VyY2UpLCBQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwor
ICAgIFJlZjxCQlFQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKHZtLCBXVEZNb3Zl
KHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAg
ICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRh
dGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0KIAogdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMo
Vk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9u
Q2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgUGxhbih2bSwgV1RGTW92ZShzb3VyY2UpLCBQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRh
dGlvbkNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgIFJlZjxQbGFuPiBwbGFuID0g
YWRvcHRSZWYoKm5ldyBCQlFQbGFuKHZtLCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlk
YXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpKSk7CiAgICAg
V2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKaW5kZXggMmMxNmNkMDIzN2U1ZDI1NGM1
ZGYxNmIxMDg5MWY0Y2ZjOGQxODFiYS4uY2VjMzBlNWI4NjE3MzNiNWZkMjI1ZjFlYTUxNTg4ZDM1
YzQ5MTVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtNjIs
NiArNjIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQXN5bmMoVk0mLCBNZW1vcnlNb2Rl
LCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5Nb2R1bGUoKTsKKworICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9y
eU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1v
ZGUpXS5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNv
ZGVCbG9jayhWTSYsIE1lbW9yeU1vZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM5NjU5N2ZkOTk5YmRjZjU2Zjg4MTEyZTgzMGQ5
MDY4NjY4NzdmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtT01HUGxhbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQjND
b21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5jbHVk
ZSAiV2FzbUNvbnRleHQuaCIKKyNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKKyNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVZhbGlkYXRlLmgiCisjaW5jbHVkZSAi
V2FzbVdvcmtsaXN0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYv
TW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworT01HUGxhbjo6
T01HUGxhbihWTSYgdm0sIFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKHZt
LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxlKG1vZHVsZS5jb3B5
UmVmKCkpCisgICAgLCBtX2NvZGVCbG9jaygqbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisg
ICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKK3sKKyAgICBzZXRNb2RlKG1vZGUp
OworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cnVubmFibGUoKSk7CisgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7CisgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIE9NRyBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4
LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKK30KKwordm9p
ZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQoreworICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+cnVubmFibGUoKSk7CisgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9k
dWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7CisgICAgY29uc3QgRnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5JiBsb2NhdGlvbiA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeVttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2UuZGF0YSgpICsgbG9jYXRpb24uc3RhcnQ7
CisgICAgY29uc3Qgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbG9jYXRpb24uZW5kIC0gbG9jYXRp
b24uc3RhcnQ7CisgICAgQVNTRVJUKGZ1bmN0aW9uU3RhcnQgKyBmdW5jdGlvbkxlbmd0aCA8PSBt
X21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2UuZW5kKCkpOworCisgICAgY29uc3QgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbklu
ZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5mdW5jdGlvbkluZGV4U3Bh
Y2VTaXplKCkpOworCisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9u
SW5kZXhdOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24o
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSkpOworCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlu
a2VkQ2FsbHM7CisgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgYXV0byBwYXJz
ZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rp
b25JbmRleCk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsK
KyAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJl
cihtX2Z1bmN0aW9uSW5kZXgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFbnRy
eXBvaW50IG9tZ0VudHJ5cG9pbnQ7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0
Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyIsIG1f
ZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCku
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT53YXNtRW50
cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKworICAgIHZvaWQqIGVudHJ5cG9pbnQ7Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVC
bG9ja0Zvcihtb2RlKCkpKTsKKyAgICAgICAgUmVmPENhbGxlZT4gY2FsbGVlID0gQ2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+d2FzbUNhbGxlZU1v
dmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAg
QVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0p
OworICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CisKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1l
IHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJl
IHdlCisgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlv
biBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxz
aXRlcywgd2hpY2ggdGhleQorICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlm
IHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24g
Y2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQorICAgICAgICAvLyB0aGUgbG9jayBvdXIg
Y29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9vLgorICAgICAgICBMb2NrSG9sZGVyIGhv
bGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fb3B0aW1p
emVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZShjYWxsZWUpOworCisgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkQ2FsbHMpIHsKKyAgICAgICAgICAgIHZvaWQqIGVu
dHJ5cG9pbnQ7CisgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCisgICAgICAg
ICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNb
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlKS5lbnRyeXBvaW50KCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGVudHJ5
cG9pbnQpKTsKKyAgICAgICAgfQorICAgICAgICB1bmxpbmtlZENhbGxzID0gc3RkOjpleGNoYW5n
ZShtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW21fZnVuY3Rpb25JbmRleF0sIHVu
bGlua2VkQ2FsbHMpOworICAgIH0KKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3Vy
ZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBp
bGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2UgY291bGQgZW5kIHVwCisgICAgLy8gd2hlcmUg
d2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNv
bWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQg
c2VlCisgICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXQn
cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4K
KyAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKKyAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBn
b29kIHRvIGJlIHBhcmFub2lkLgorCisgICAgbV9jb2RlQmxvY2stPm1fd2FzbUVudHJ5UG9pbnRz
W21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisKKyAgICAgICAgYXV0byByZXBhdGNoQ2Fs
bHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgIGNhbGxzaXRl
cykgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2Fs
bCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIg
dGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwg
YXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRv
ICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludCkpOzsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICB9OworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
aSAhPSBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG1f
Y29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIHJlcGF0Y2ggYW55IHJlY3Vyc2l2ZSBjYWxscy4KKyAgICAgICAg
cmVwYXRjaENhbGxzKHVubGlua2VkQ2FsbHMpOworICAgIH0KKworICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJGaW5pc2hlZCB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIG1fY29kZUJsb2NrLT50
aWVyVXBDb3VudChtX2Z1bmN0aW9uSW5kZXgpLmNvdW50KCkpOworICAgIGNvbXBsZXRlKGhvbGRM
b2NrKG1fbG9jaykpOworfQorCit2b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0KiBjb250
ZXh0LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQoreworICAgIFZNJiB2bSA9ICpjb250ZXh0LT52
bSgpOworCisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gY29udGV4dC0+
Y29kZUJsb2NrKCk7CisgICAgQVNTRVJUKGNvbnRleHQtPm1lbW9yeU1vZGUoKSA9PSBjb2RlQmxv
Y2stPm1fY29kZUJsb2NrLT5tb2RlKCkpOworCisgICAgLy8gV2UgdXNlIHRoZSBsZWFzdCBzaWdu
aWZpY2FudCBiaXQgb2YgdGhlIHRpZXJVcENvdW50IHRvIHJlcHJlc2VudCB3aGV0aGVyIG9yIG5v
dCBzb21lb25lIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgdGhlIHRpZXIgdXAuCisgICAgaWYgKGNvZGVC
bG9jay0+bV9jb2RlQmxvY2stPnRpZXJVcENvdW50KGZ1bmN0aW9uSW5kZXgpLnNob3VsZFN0YXJ0
VGllclVwKCkpIHsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1Bs
YW4odm0sIGNvbnRleHQtPm1vZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJs
b2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgICAg
ICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOworICAgICAgICBpZiAo
VU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCisgICAgICAgICAgICBwbGFu
LT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmNDVjN2JjZTliMzllMDg5YWZjMmY4
YWZmMWQ5MzI1YmYzNzc3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIK
KyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rSW5mbzsKKworbmFtZXNwYWNlIFdhc20geworCitj
bGFzcyBPTUdQbGFuIGZpbmFsIDogcHVibGljIFBsYW4geworcHVibGljOgorICAgIHVzaW5nIEJh
c2UgPSBQbGFuOworICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBh
IHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5j
ZSBjeWNsZS4KKyAgICBPTUdQbGFuKFZNJiwgUmVmPE1vZHVsZT4sIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworCisgICAgYm9vbCBoYXNXb3Jr
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fY29tcGxldGVkOyB9CisgICAgdm9pZCB3b3Jr
KENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKKyAgICBib29sIG11bHRpVGhyZWFkZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIC8vIEZvciBz
b21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4u
CisgICAgdXNpbmcgQmFzZTo6bV9sb2NrOworCisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2NvbXBs
ZXRlZCA9IHRydWU7CisgICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcyhsb2NrZXIpOworICAgIH0K
KyAgICAKKyAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKKyAgICBSZWY8Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jazsKKyAgICBib29sIG1fY29tcGxldGVkIHsgZmFsc2UgfTsKKyAgICB1aW50MzJfdCBt
X2Z1bmN0aW9uSW5kZXg7Cit9OworCit2b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0Kiwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisg
ICAgICAgICAgICAgICAgCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IDdiNzFjZDY4NGVkNTdiMTFmZWQ2ZTgy
NjVkZWJhZDNkZGQyZTU3OTEuLmE4YzQ5ZDk0MjM5ZTdhNzY4NzBhMDM1YzkzZWE0OWRiZDg5ZGUz
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTUwLDI5MSAr
NTAsNDUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi1QbGFuOjpQbGFuKFZNJiB2bSwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQor
UGxhbjo6UGxhbihWTSYgdm0sIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxldGlv
blRhc2smJiB0YXNrKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQog
ICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAs
IG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCi0gICAg
LCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCi0gICAgLCBtX2FzeW5jV29yayh3b3JrKQogewog
ICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1vdmUo
dGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IFBsYW4odm0s
IG1ha2VSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywg
V1RGTW92ZSh0YXNrKSkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7Ci19Ci0KLVBs
YW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5n
dGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCitQbGFuOjpQbGFuKFZN
JiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBDb21wbGV0
aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKG1ha2VSZWYoKm5ldyBN
b2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uoc291
cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQotICAgICwgbV9zdGF0ZShT
dGF0ZTo6SW5pdGlhbCkKLSAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiAgICAgbV9jb21wbGV0
aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ2bSwgV1RGTW92ZSh0YXNrKSkpOwogfQog
Ci1jb25zdCBjaGFyKiBQbGFuOjpzdGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSkKK3ZvaWQgUGxhbjo6
cnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBzd2l0Y2gg
KHN0YXRlKSB7Ci0gICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFsIjsKLSAg
ICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6IHJldHVybiAiVmFsaWRhdGVkIjsKLSAgICBjYXNlIFN0
YXRlOjpQcmVwYXJlZDogcmV0dXJuICJQcmVwYXJlZCI7Ci0gICAgY2FzZSBTdGF0ZTo6Q29tcGls
ZWQ6IHJldHVybiAiQ29tcGlsZWQiOwotICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDogcmV0dXJu
ICJDb21wbGV0ZWQiOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQorICAgIEFTU0VSVChpc0NvbXBsZXRlKCkgJiYgIWhhc1dvcmsoKSk7CiAKLXZvaWQgUGxhbjo6
bW92ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCi17Ci0gICAgQVNTRVJUKHN0YXRlID49IG1fc3RhdGUp
OwotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UgJiYgc3RhdGUgIT0gbV9zdGF0ZSwgIm1vdmluZyB0
byBzdGF0ZTogIiwgc3RhdGVTdHJpbmcoc3RhdGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3Ry
aW5nKG1fc3RhdGUpKTsKLSAgICBtX3N0YXRlID0gc3RhdGU7Ci19Ci0KLXZvaWQgUGxhbjo6ZmFp
bChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCi17
Ci0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJv
ck1lc3NhZ2UpOwotICAgIG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOwot
ICAgIGNvbXBsZXRlKGxvY2tlcik7CisgICAgZm9yIChhdXRvJiB0YXNrIDogbV9jb21wbGV0aW9u
VGFza3MpCisgICAgICAgIHRhc2suc2Vjb25kLT5ydW4oKnRhc2suZmlyc3QsICp0aGlzKTsKKyAg
ICBtX2NvbXBsZXRpb25UYXNrcy5jbGVhcigpOworICAgIG1fY29tcGxldGVkLm5vdGlmeUFsbCgp
OwogfQogCiB2b2lkIFBsYW46OmFkZENvbXBsZXRpb25UYXNrKFZNJiB2bSwgQ29tcGxldGlvblRh
c2smJiB0YXNrKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgaWYgKG1f
c3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICBpZiAoIWlzQ29tcGxldGUoKSkKICAgICAg
ICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ2bSwgV1RGTW92ZSh0
YXNrKSkpOwogICAgIGVsc2UKICAgICAgICAgdGFzay0+cnVuKHZtLCAqdGhpcyk7CiB9CiAKLWJv
b2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0g
U3RhdGU6OkluaXRpYWwpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgInN0YXJ0aW5nIHZhbGlkYXRpb24iKTsKLSAgICBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZTsKLSAgICBpZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkK
LSAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0KLSAgICB7Ci0gICAg
ICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBt
X21vZHVsZUluZm9ybWF0aW9uKTsKLSAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IG1vZHVsZVBh
cnNlci5wYXJzZSgpOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7Ci0gICAgICAgICAgICBm
YWlsKGhvbGRMb2NrKG1fbG9jayksIFdURk1vdmUocGFyc2VSZXN1bHQuZXJyb3IoKSkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7Ci0gICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rp
b25JbmRleCA8IGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0g
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5n
IGF0OiAiLCBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQgZW5k
aW5nIGF0OiAiLCBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQpOwotICAgICAg
ICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxvY2F0
aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
ID0gZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2NhdGlv
bnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8
PSBtX3NvdXJjZUxlbmd0aCk7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0KLSAgICAgICAgYXV0byB2
YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlv
bkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKLSAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkgewotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytp
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2Nr
KSwgbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0
IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2Ug
dGhpcyBhbiBFeHBlY3RlZC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygp
KQotICAgICAgICBkYXRhTG9nTG4oIlRvb2sgIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3Rh
cnRUaW1lKS5taWNyb3NlY29uZHMoKSwgIiB1cyB0byB2YWxpZGF0ZSBtb2R1bGUiKTsKLSAgICBp
ZiAobV9hc3luY1dvcmsgPT0gVmFsaWRhdGlvbikKLSAgICAgICAgY29tcGxldGUoaG9sZExvY2so
bV9sb2NrKSk7Ci0gICAgZWxzZQotICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6VmFsaWRhdGVk
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbGFuOjpwcmVwYXJlKCkKLXsKLSAgICBB
U1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6VmFsaWRhdGVkKTsKLSAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiU3RhcnRpbmcgcHJlcGFyYXRpb24iKTsKLQotICAgIFRyYWNlU2NvcGUgdHJhY2VTY29w
ZShXZWJBc3NlbWJseUNvbXBpbGVTdGFydCwgV2ViQXNzZW1ibHlDb21waWxlRW5kKTsKLQotICAg
IGF1dG8gdHJ5UmVzZXJ2ZUNhcGFjaXR5ID0gW3RoaXNdIChhdXRvJiB2ZWN0b3IsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiB3aGF0KSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdmVjdG9yLnRy
eVJlc2VydmVDYXBhY2l0eShzaXplKSkpIHsKLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFsbG9jYXRp
bmcgZW5vdWdoIHNwYWNlIGZvciAiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KHNpemUpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQod2hhdCk7Ci0gICAgICAgICAgICBm
YWlsKGhvbGRMb2NrKG1fbG9jayksIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLQot
ICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwotICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1f
d2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJz
IikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8g
V2ViQXNzZW1ibHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1i
bHkgZnVuY3Rpb25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0
aW9uQ29udGV4dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250
ZXh0cyIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LnJlc2l6ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zLnJlc2l6ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRp
b25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmltcG9ydHMuc2l6ZSgpOyArK2ltcG9ydEluZGV4KSB7Ci0gICAgICAgIEltcG9ydCogaW1w
b3J0ID0gJm1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHNbaW1wb3J0SW5kZXhdOwotICAgICAg
ICBpZiAoaW1wb3J0LT5raW5kICE9IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2Fz
bVRvV2FzbUV4aXRTdHVicy5zaXplKCk7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQ
cm9jZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwg
IjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0
LT5maWVsZCkpOwotICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5k
KHdhc21Ub1dhc20oaW1wb3J0RnVuY3Rpb25JbmRleCkpOwotICAgIH0KLQotICAgIG1vdmVUb1N0
YXRlKFN0YXRlOjpQcmVwYXJlZCk7Ci19Ci0KLS8vIFdlIGRvbid0IGhhdmUgYSBzZW1hcGhvcmUg
Y2xhc3MuLi4gYW5kIHRoaXMgZG9lcyBraW5kYSBpbnRlcmVzdGluZyB0aGluZ3MuCi1jbGFzcyBQ
bGFuOjpUaHJlYWRDb3VudEhvbGRlciB7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkQ291bnRIb2xkZXIo
UGxhbiYgcGxhbikKLSAgICAgICAgOiBtX3BsYW4ocGxhbikKLSAgICB7Ci0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fcGxhbi5tX2xvY2spOwotICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFj
dGl2ZVRocmVhZHMrKzsKLSAgICB9Ci0KLSAgICB+VGhyZWFkQ291bnRIb2xkZXIoKQotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGFuLm1fbG9jayk7Ci0gICAgICAgIG1fcGxh
bi5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwotCi0gICAgICAgIGlmICghbV9wbGFuLm1fbnVt
YmVyT2ZBY3RpdmVUaHJlYWRzICYmICFtX3BsYW4uaGFzV29yaygpKQotICAgICAgICAgICAgbV9w
bGFuLmNvbXBsZXRlKGxvY2tlcik7Ci0gICAgfQotCi0gICAgUGxhbiYgbV9wbGFuOwotfTsKLQot
dm9pZCBQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsK
LSAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQpOwotICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlvbiIpOwotCi0gICAgaWYgKCFoYXNXb3JrKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRlcigqdGhpcyk7
Ci0KLSAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0byYgZnVuY3Rp
b25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnk7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKGVmZm9ydCA9PSBQYXJ0aWFsICYm
IGJ5dGVzQ29tcGlsZWQgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRl
eDsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwotICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49IGZ1bmN0aW9uTG9jYXRpb25zLnNp
emUoKSkgewotICAgICAgICAgICAgICAgIGlmIChoYXNXb3JrKCkpCi0gICAgICAgICAgICAgICAg
ICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21waWxlZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudElu
ZGV4OwotICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGgg
PSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9u
c1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9
IG1fc291cmNlTGVuZ3RoKTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgg
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tm
dW5jdGlvbkluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0
aW9uSW5kZXg7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgIEFTU0VSVCh2YWxp
ZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKLQotICAgICAgICBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7
Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1f
Y29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBPcHRpb25zOjp3ZWJBc3Nl
bWJseUIzT3B0aW1pemF0aW9uTGV2ZWwoKSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJz
ZUFuZENvbXBpbGVSZXN1bHQpKSB7Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2Ug
YXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KLSAgICAgICAgICAgICAgICBmYWlsKGxvY2tl
ciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rp
b24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUg
bWFrZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0gICAgICAgIGJ5dGVzQ29t
cGlsZWQgKz0gZnVuY3Rpb25MZW5ndGg7Ci0gICAgfQotfQotCi12b2lkIFBsYW46OmNvbXBsZXRl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6
Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7Ci0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0
YXJ0aW5nIENvbXBsZXRpb24iKTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21waWxl
ZCkgewotICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbklu
ZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUo
KTsgZnVuY3Rpb25JbmRleCsrKSB7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29t
cGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdOwotICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleF07Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21w
aWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lmpz
RW50cnlwb2ludEpJVCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0
cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQu
Y29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNt
RW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9u
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJK
YXZhU2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgs
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5q
c0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscykgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5r
ZWQpIHsKLSAgICAgICAgICAgICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsKLSAgICAgICAg
ICAgICAgICBpZiAobV9tb2R1bGVJbmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVh
ZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJl
cGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3Mg
PSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4KS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxs
LmZ1bmN0aW9uSW5kZXggLSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpKS0+d2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpDb21wbGV0ZWQpIHsKLSAg
ICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBsZXRlZCk7Ci0gICAgICAgIGZvciAoYXV0byYg
dGFzayA6IG1fY29tcGxldGlvblRhc2tzKQotICAgICAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigq
dGFzay5maXJzdCwgKnRoaXMpOwotICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5jbGVhcigpOwot
ICAgICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKLSAgICB9Ci19Ci0KIHZvaWQgUGxhbjo6
d2FpdEZvckNvbXBsZXRpb24oKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0g
ICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkgewotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgYSB3YWl0IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBo
b2xkIHRoZSBsb2NrIHRvIGNvbXBsZXRlIC8gZmFpbC4KKyAgICBpZiAoIWlzQ29tcGxldGUoKSkg
ewogICAgICAgICBtX2NvbXBsZXRlZC53YWl0KG1fbG9jayk7CiAgICAgfQogfQpAQCAtMzUzLDEz
ICsxMDcsMTMgQEAgYm9vbCBQbGFuOjp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYgdm0p
CiAgICAgaWYgKCFyZW1vdmVkQW55VGFza3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICBpZiAoaXNDb21wbGV0ZSgp
KSB7CiAgICAgICAgIC8vIFdlIHRyaXZpYWxseSBjYW5jZWwgYW55dGhpbmcgdGhhdCdzIGNvbXBs
ZXRlZC4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKG1fY29tcGxldGlv
blRhc2tzLmlzRW1wdHkoKSkgewotICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgaWYgKG1fY29t
cGxldGlvblRhc2tzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIEFTU0VSVCghbV9jb21wbGV0aW9u
VGFza3NbMF0uZmlyc3QpOwogICAgICAgICBmYWlsKGxvY2tlciwgQVNDSUlMaXRlcmFsKCJXZWJB
c3NlbWJseSBQbGFuIHdhcyBjYW5jZWxsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNzYWdl
IHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTM2Nyw2ICsxMjEsMTMgQEAgYm9vbCBQbGFuOjp0cnlSZW1vdmVW
TUFuZENhbmNlbElmTGFzdChWTSYgdm0pCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFBs
YW46OmZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNz
YWdlKQoreworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsaW5nIHdpdGggbWVzc2FnZTog
IiwgZXJyb3JNZXNzYWdlKTsKKyAgICBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUoZXJyb3JNZXNz
YWdlKTsKKyAgICBjb21wbGV0ZShsb2NrZXIpOworfQorCiBQbGFuOjp+UGxhbigpIHsgfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmgKaW5kZXggYjZiZWYwNmQ5ZTM5ZjZmN2I5MDU3ZDcxMThlZThjNGViYjZlNGUyMS4uZDQ1ZWQx
ZmQ2ODIyZTQxM2FlYmU2OTE1MTFiZmI3ZjFhODAxMzRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oCkBAIC00OSwxMDkgKzQ5LDQ4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgUGxhbiYpOwogICAgIHVzaW5nIENvbXBsZXRpb25UYXNr
ID0gUmVmUHRyPFNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47CiAgICAgc3RhdGljIENvbXBsZXRp
b25UYXNrIGRvbnRGaW5hbGl6ZSgpIHsgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8Q2FsbGJhY2tU
eXBlPihbXShWTSYsIFBsYW4mKSB7IH0pOyB9Ci0gICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90
IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKLSAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFz
ayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJl
IHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgUGxhbihWTSYsIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25U
YXNrJiYpOworICAgIFBsYW4oVk0mLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9u
VGFzayYmKTsKKwogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUg
dXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlk
YXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICAvLyBGSVhNRTogV2hlbiB3ZSBnZXQgcmlkIG9mIGZ1
bmN0aW9uIHRlc3RzIHdlIHNob3VsZCByZW1vdmUgQXN5bmNXb3JrIGZyb20gdGhpcyBjb25zdHJ1
Y3Rvci4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgY29uc3QgdWludDhfdCosIHNp
emVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB+UGxhbigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90
Kiwgc2l6ZV90LCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICB2aXJ0dWFsIEpTX0VYUE9SVF9QUklW
QVRFIH5QbGFuKCk7CiAKICAgICAvLyBJZiB5b3UgZ3VhcmFudGVlIHRoZSBvcmRlcmluZyBoZXJl
LCB5b3UgY2FuIHJlbHkgb24gRklGTyBvZiB0aGUKICAgICAvLyBjb21wbGV0aW9uIHRhc2tzIGJl
aW5nIGNhbGxlZC4KICAgICB2b2lkIGFkZENvbXBsZXRpb25UYXNrKFZNJiwgQ29tcGxldGlvblRh
c2smJik7CiAKLSAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKLQotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZSgpOwotICAgIGVudW0gQ29tcGlsYXRpb25FZmZvcnQg
eyBBbGwsIFBhcnRpYWwgfTsKLSAgICB2b2lkIGNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25F
ZmZvcnQgPSBBbGwpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lk
IGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImKTsKLQotICAgIFZlY3RvcjxFeHBvcnQ+
JiBleHBvcnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4
cG9ydHM7Ci0gICAgfQotCi0gICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7
Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uQ291
bnQoKTsKLSAgICB9Ci0KLSAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUlu
Zm9ybWF0aW9uKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAh
aGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV9tb2R1bGVJbmZvcm1hdGlvbik7
Ci0gICAgfQotCi0gICAgQmFnPENhbGxMaW5rSW5mbz4mJiB0YWtlQ2FsbExpbmtJbmZvcygpCi0g
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0g
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fY2FsbExpbmtJbmZvcyk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4mJiB0YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpCi0g
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0g
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fd2FzbVRvV2FzbUV4aXRTdHVicyk7Ci0gICAgfQotCiAg
ICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAg
TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKLSAgICBlbnVtIGNs
YXNzIFN0YXRlIDogdWludDhfdCB7Ci0gICAgICAgIEluaXRpYWwsCi0gICAgICAgIFZhbGlkYXRl
ZCwKLSAgICAgICAgUHJlcGFyZWQsCi0gICAgICAgIENvbXBpbGVkLAotICAgICAgICBDb21wbGV0
ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcg
dGhlIGxvY2suCi0gICAgfTsKLQogICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFlcnJvck1lc3NhZ2UoKS5pc051bGwoKTsgfQot
ICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGls
ZWQ7IH0KLSAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
Pj0gU3RhdGU6OlByZXBhcmVkOyB9CisgICAgdmlydHVhbCBib29sIGhhc1dvcmsoKSBjb25zdCA9
IDA7CisgICAgZW51bSBDb21waWxhdGlvbkVmZm9ydCB7IEFsbCwgUGFydGlhbCB9OworICAgIHZp
cnR1YWwgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0ID0gQWxsKSA9IDA7CisgICAgdmlydHVh
bCBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCA9IDA7CiAKICAgICB2b2lkIHdhaXRGb3JDb21w
bGV0aW9uKCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGNhbmNlbGxlZCB0aGUgcGxhbi4K
ICAgICBib29sIHRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJik7CiAKLXByaXZhdGU6Ci0g
ICAgY2xhc3MgVGhyZWFkQ291bnRIb2xkZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFRocmVhZENvdW50
SG9sZGVyOwotCi0gICAgdm9pZCBjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpOwotCi0g
ICAgdm9pZCBtb3ZlVG9TdGF0ZShTdGF0ZSk7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5Db21w
bGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKICAgICB2b2lkIGZhaWwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgY29uc3QgY2hh
ciogc3RhdGVTdHJpbmcoU3RhdGUpOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBsZXRlKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYp
ID0gMDsKIAogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsK
LSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwotICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
czsKLSAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7
CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBs
ZXRpb25UYXNrczsKIAotICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7
CiAgICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwogICAgIFN0cmluZyBtX2Vycm9yTWVz
c2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
IH07CiAgICAgTG9jayBtX2xvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOwotICAgIFN0
YXRlIG1fc3RhdGU7Ci0gICAgY29uc3QgQXN5bmNXb3JrIG1fYXN5bmNXb3JrOwotICAgIHVpbnQ4
X3QgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07Ci0gICAgdWludDMyX3QgbV9jdXJyZW50
SW5kZXggeyAwIH07CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW5JbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDlhZTJiOTY2MDA5
M2E5YmViNzBkMWJkMWQ4YzQ1MTM0NjU4MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5Jbmxp
bmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCi0KLSNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxl
ZS5oIgotI2luY2x1ZGUgIldhc21QbGFuLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIFBsYW46OmluaXRpYWxp
emVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQotewotICAgIEFTU0VSVCghZmFpbGVk
KCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJu
YWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVy
bmFsRnVuY3Rpb25JbmRleCkgewotICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rp
b24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgp
OwotCi0gICAgICAgIFJlZjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IFdhc206
OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2ludCkpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNt
Q2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGpzRW50cnlwb2ludENhbGxl
ZS5wdHIoKSkpOwotCi0gICAgICAgIFJlZjxXYXNtOjpDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2Fs
bGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9p
bnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53
YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50
Q2FsbGVlLnB0cigpKSk7Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4
LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxs
ZWUpKTsKLSAgICB9Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGllclVwQ291bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aWVyVXBDb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZDE4ZGE2NjQ1NjYxNzg3Mjg0OTgyNWRjNGJmNjBi
MTY0ZGU1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGllclVwQ291bnQuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKKyAgICAvLyBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIHRpZXIgdXAgY291bnRz
IGZvciBXYXNtIGJpbmFyaWVzLiBUaGUgbWFpbiBpbnRlcmVzdGluZyB0aGluZyBhYm91dAorICAg
IC8vIHdhc20gdGllcmluZyB1cCBjb3VudHMgaXMgdGhhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQg
Yml0IGluZGljYXRlcyBpZiB0aGUgdGllciB1cCBoYXMgYWxyZWFkeQorICAgIC8vIHN0YXJ0ZWQu
IEFsc28sIHdhc20gY29kZSBkb2VzIG5vdCBhdG9taWNhbGx5IHVwZGF0ZSB0aGlzIGNvdW50LiBU
aGlzIGlzIGJlY2F1c2Ugd2UKKyAgICAvLyBkb24ndCBjYXJlIHRvbyBtdWNoIGlmIHRoZSBjb3Vu
dGRvd24gaXMgc2xpZ2h0bHkgb2ZmLiBUaGUgdGllciB1cCB0cmlnZ2VyIGlzIGF0b21pYywgaG93
ZXZlciwKKyAgICAvLyBzbyB0aWVyIHVwIHdpbGwgYmUgdHJpZ2dlcmVkIGV4YWN0bHkgb25jZS4K
KyAgICBjbGFzcyBUaWVyVXBDb3VudCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRp
ZXJVcENvdW50KTsKKyAgICBwdWJsaWM6CisgICAgICAgIFRpZXJVcENvdW50KCkKKyAgICAgICAg
ICAgIDogbV9jb3VudChPcHRpb25zOjp3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50KCkgKiAyKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBUaWVyVXBDb3VudChUaWVyVXBDb3VudCYm
IG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb3VudCA9PSBP
cHRpb25zOjp3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50KCkgKiAyKTsKKyAgICAgICAgICAgIG1f
Y291bnQgPSBvdGhlci5tX2NvdW50OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHVpbnQz
Ml90IGxvb3BEZWNyZW1lbnQoKSB7IHJldHVybiBPcHRpb25zOjp3ZWJBc3NlbWJseUxvb3BEZWNy
ZW1lbnQoKSAqIDI7IH0KKyAgICAgICAgc3RhdGljIHVpbnQzMl90IGZ1bmN0aW9uRW50cnlEZWNy
ZW1lbnQoKSB7IHJldHVybiBPcHRpb25zOjp3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1l
bnQoKSAqIDI7IH0KKworICAgICAgICBib29sIHNob3VsZFN0YXJ0VGllclVwKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEoV1RGOjphdG9taWNFeGNoYW5nZU9yKCZtX2NvdW50LCAx
KSAmIDEpOworICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCBjb3VudCgpIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxpbnQzMl90PihtX2NvdW50KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dWludDMyX3QgbV9jb3VudDsKKyAgICB9OworICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCmluZGV4IDVmYWRmY2IxMzU3MDkwOTMyMmZhODc5ZjVi
NzZkNDY5OWJlOWMzZDguLjc2YTg3YWMxYjQ3MzZmM2NmMzdjMzUzOWRiYzk2MWY2Nzg2YTAxMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApAQCAtNzQs
MTAgKzc0LDggQEAgcHJvdGVjdGVkOgogCiAgICAgICAgICAgICBlbGVtZW50ID0gcXVldWUucGVl
aygpOwogICAgICAgICAgICAgLy8gT25seSBvbmUgdGhyZWFkIHNob3VsZCB2YWxpZGF0ZS9wcmVw
YXJlLgotICAgICAgICAgICAgaWYgKCFxdWV1ZS5wZWVrKCkucGxhbi0+aGFzQmVlblByZXBhcmVk
KCkpIHsKKyAgICAgICAgICAgIGlmICghcXVldWUucGVlaygpLnBsYW4tPm11bHRpVGhyZWFkZWQo
KSkKICAgICAgICAgICAgICAgICBxdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFBvbGxSZXN1bHQ6Oldvcms7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChl
bGVtZW50LnBsYW4tPmhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3Vs
dDo6V29yazsKQEAgLTEwMCwxMyArOTgsMTIgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIFBsYW4q
IHBsYW4gPSBlbGVtZW50LnBsYW4uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChwbGFuKTsKLSAgICAg
ICAgaWYgKCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgewotICAgICAgICAgICAgcGxhbi0+cGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwotICAgICAgICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xv
Y2spKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcGxhbi0+cHJlcGFyZSgpOwogCisgICAg
ICAgIGJvb2wgd2FzTXVsdGlUaHJlYWRlZCA9IHBsYW4tPm11bHRpVGhyZWFkZWQoKTsKKyAgICAg
ICAgcGxhbi0+d29yayhQbGFuOjpQYXJ0aWFsKTsKKworICAgICAgICBBU1NFUlQoIXBsYW4tPmhh
c1dvcmsoKSB8fCBwbGFuLT5tdWx0aVRocmVhZGVkKCkpOworICAgICAgICBpZiAocGxhbi0+aGFz
V29yaygpICYmICF3YXNNdWx0aVRocmVhZGVkICYmIHBsYW4tPm11bHRpVGhyZWFkZWQoKSkgewog
ICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAgICAg
ICAgICBlbGVtZW50LnNldFRvTmV4dFByaW9yaXR5KCk7CiAgICAgICAgICAgICB3b3JrbGlzdC5t
X3F1ZXVlLmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CkBAIC0xMTQsNyArMTExLDYgQEAgcHJv
dGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKGxvY2tlcik7CiAgICAgICAgIH0K
IAotICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKFBsYW46OlBhcnRpYWwpOwogICAgICAg
ICByZXR1cm4gY29tcGxldGUoaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAppbmRleCBhZDRiMTA4OTkw
NmUzNjc1NDkzN2I2OTliYmRmOGJkY2U1NGQyOTBiLi42YjY5MzUyYWE3NWM5YjVjOGMyM2JmMWYx
NDljM2RhZWZiYTE2ZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuaApAQCAtNTcsMTMgKzU3LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZhdGVQbGFuKEpT
UHJvbWlzZURlZmVycmVkKiwgUGxhbiopOwogICAgIHZvaWQgZGVhY3RpdmVQbGFuKEpTUHJvbWlz
ZURlZmVycmVkKiwgUGxhbiopOwogCi1wcml2YXRlOgotICAgIGNsYXNzIFRocmVhZDsKLSAgICBm
cmllbmQgY2xhc3MgVGhyZWFkOwotCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUaWNrZXQ7Ci0gICAg
VGlja2V0IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RHcmFudGVkVGlja2V0Kys7IH0KLQog
ICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93biwKICAgICAgICAgU3lu
Y2hyb25vdXMsCkBAIC03Miw2ICs2NSwxMyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgY29uc3Qg
Y2hhciogcHJpb3JpdHlTdHJpbmcoUHJpb3JpdHkpOwogCitwcml2YXRlOgorICAgIGNsYXNzIFRo
cmVhZDsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkOworCisgICAgdHlwZWRlZiB1aW50NjRfdCBU
aWNrZXQ7CisgICAgVGlja2V0IG5leHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RHcmFudGVkVGlj
a2V0Kys7IH0KKwogICAgIHN0cnVjdCBRdWV1ZUVsZW1lbnQgewogICAgICAgICBQcmlvcml0eSBw
cmlvcml0eTsKICAgICAgICAgVGlja2V0IHRpY2tldDsKQEAgLTg3LDcgKzg3LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKICAgICB9
CiAKLQogICAgIEJveDxMb2NrPiBtX2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQg
b3ZlcmZsb3cgYnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVz
dCBjb21waWxlIHRoaW5ncyBvZiB0aGUgc2FtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmMTQwMmEz
OTdkZTBjY2QyYjkzMDJiMTQzODg1ZmMzODcxM2RmMjUwLi5kYzJkNjRlOTNmYjU2YTI4NjlhYzdh
NDFjNGU0MjdjMmMxZjI4NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzMsNyArMzMsNyBAQAog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklu
bGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKIAogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggNTFjN2UzMWQzYmUwMjAwZTUy
NjFjNGUxM2ZlZGJhNGEwM2Q0YjRlNi4uZGRkNmU1ODQzYmRlMWMzZTEyMzc4OTYzMTQxYTIyYzY2
NDYyYjYyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtNjgsMTQgKzY4LDE0IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KLSAgICBXYXNtOjpDYWxs
ZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UpCisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSk7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgfQog
Ci0gICAgdm9pZCogd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRl
eCkKKyAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9Kc0NhbGxTdHVi
Rm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlt
cG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCk7CisgICAgICAgIHJldHVybiAmaW1wb3J0V2Fz
bVRvSlNTdHViKGltcG9ydEluZGV4KTsKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5k
ZXggYzgyZTM1MmYxOWNjMmE0NDI2ZGFhNDU5NzMzMGQ5M2VjYzJkYjUwMS4uNjgzZDE2NDk5ZGY0
NGYzOTIyZmIyNTY5NjY1OWEwNTA2NDUzNWJhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCkBAIC0xMjgsMTQgKzEyOCwx
NCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJf
dCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbV9zaXplKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMs
IGZ1bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJs
ZUZ1bmN0aW9uKGZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5
cG9pbnQoKSk7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxh
YmxlRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9u
KFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5j
dGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CiAgICAgbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5j
dGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2ln
bmF0dXJlSW5kZXgoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworICAgIG1fZnVuY3Rp
b25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCBmNzcyZDk4ZDA2YzYxYzJhZDE1Y2IxY2Jk
ODJlZTQ4YmZmYzAxYjRhLi44YTdhMWQwYjY4ZWJhMTc2YWVhOGE1YjE1NzQ4OGY4OGYxYmNjZmEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcApAQCAtMTU3LDEwICsxNTcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6Q2Fs
bGVlJiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgp
CitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVl
JiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKLSAgICBBU1NF
UlQoJmpzRW50cnlwb2ludCAhPSAmd2FzbUVudHJ5cG9pbnQpOwotCiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0u
aGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBq
c0VudHJ5cG9pbnQsIHdhc21FbnRyeXBvaW50LCBzaWduYXR1cmVJbmRleCk7CkBAIC0xNzUsMTEg
KzE3MywxMCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFdlYkFzc2VtYmx5
RnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5
RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9p
bnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
KQogICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2pzRW50
cnlwb2ludChqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgpKQotICAgICwgbV93YXNtRW50cnlwb2lu
dCh3YXNtRW50cnlwb2ludC5lbnRyeXBvaW50KCkpCi0gICAgLCBtX3NpZ25hdHVyZUluZGV4KHNp
Z25hdHVyZUluZGV4KQorICAgICwgbV93YXNtRnVuY3Rpb24oV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bihzaWduYXR1cmVJbmRleCwgd2FzbUVudHJ5cG9pbnQpKQogeyB9CiAKIHZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5oCmluZGV4IDRjYmY1ZGM0ZTIzOWYzNTBkYmRkMDU3ZDM4YjZmMTY1MmU4OTBmODIu
LjNiYmEwOTNiMzJmMzU5NmZkZDc5MDNjNDAzNTJjZjIwNTdiMTNkNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKQEAgLTQ5
LDE2ICs0OSwxOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpDYWxsZWUmIHdhc21F
bnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNh
bGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2Fz
bTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQotICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9z
aWduYXR1cmVJbmRleDsgfQotICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93
YXNtRW50cnlwb2ludDsgfQorICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KKyAgICBX
YXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uLmNvZGU7IH0KKyAgICBXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uIGNhbGxhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5j
dGlvbjsgfQorCiAgICAgdm9pZCoganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9p
bnQ7IH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2luc3RhbmNlKTsgfQotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21FbnRyeXBvaW50KTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21GdW5jdGlv
bikgKyBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTY2LDE4ICs2OCwxNCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAKIHBy
aXZhdGU6Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVu
dHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUlu
ZGV4KTsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFu
Y2U7Ci0gICAgLy8gV2UgY2FuIGhvbGQgcmF3IHBvaW50ZXJzIHRvIHRoZXNlIGV4ZWN1dGFibGUg
YWRkcmVzcyBwb2ludGVycyBzaW5jZQotICAgIC8vIHdlIGhhdmUgYSBHQyByZWZlcmVuY2UgdG8g
b3VyIGluc3RhbmNlLCB3aGljaCBrZWVwcyBhbGl2ZSB0aGUgQ29kZUJsb2NrLAotICAgIC8vIHdo
aWNoIG93bnMgdGhpcyBwb2ludGVyLgotICAgIHZvaWQqIG1fanNFbnRyeXBvaW50OwotICAgIHZv
aWQqIG1fd2FzbUVudHJ5cG9pbnQ7Ci0gICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUg
cmF3IHNpZ25hdHVyZUluZGV4IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQorICAgIC8vIEl0
J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxsYWJsZUZ1bmN0aW9uL2pzRW50cnlwb2lu
dCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdo
aWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCi0gICAgLy8g
ZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVk
LgotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CisgICAgLy8gZW5z
dXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0
ZWQuCisgICAgdm9pZCogbV9qc0VudHJ5cG9pbnQ7CisgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlv
biBtX3dhc21GdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCmluZGV4IDAxNzFmMmQ4MDA1YzFmZDdiMDFmY2E4MGEwMjgwNWMzN2E3NWU1MDAuLjcwNTRh
ODljNWE4MjQ2YTA4Mjk4M2I0YTFmNmU0MDI1ZTNhN2ViZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
QEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmso
RXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAg
ICAgICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8v
ICAgICBjLiBSZXR1cm4gZnVuYy4KICAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50
cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUm
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgV2Fz
bTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
PSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24g
PSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpLCBpbnN0YW5jZSwg
anNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSwgaW5zdGFuY2UsIGpzRW50cnlw
b2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSog
bW9kdWxlLAogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRG
dW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpz
RW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXYXNt
OjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwot
ICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT53YXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UpOworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24g
PSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwg
d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAg
IG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTI3MCwxNCArMjcwLDE0IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAg
ICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJs
b2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25J
bmRleCk7CisgICAgICAgICAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAg
ICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4
IDAuCiAgICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFi
bGUgYW4gRWxlbWVudCB3LyBpbmRleCAwLgogICAgICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJ
bnN0YW5jZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwogICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAg
ICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmds
b2JhbE9iamVjdCgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0
YW5jZS5nZXQoKSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2ln
bmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFs
T2JqZWN0KCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNl
LmdldCgpLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBz
aWduYXR1cmVJbmRleCk7CiAKICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0s
IHRhYmxlSW5kZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3Rv
dHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3Rv
dHlwZS5jcHAKaW5kZXggNzA4NDFmMDVkODU1YThhMzA1YTU4OGRlNTU5ZGNkM2JlZGMyYmI1OS4u
ZGFiMjcwZjNiOTAxYjY1OWQyMjBlNWYxNDgxZmFjMGI0ZTg1NjU3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcApA
QCAtMzgsMTIgKzM4LDEzIEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
LSNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCiAjaW5jbHVk
ZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgogCiB1c2lu
ZyBKU0M6Oldhc206OlBsYW47Cit1c2luZyBKU0M6Oldhc206OkJCUVBsYW47CiAKIG5hbWVzcGFj
ZSBKU0Mgewogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlD
b21waWxlRnVuYyhFeGVjU3RhdGUqKTsKQEAgLTIxMSw3ICsyMTIsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNt
QnVmZmVyRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRl
U2l6ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgV2FzbTo6UGxhbiBwbGFuKHZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBs
YW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4o
dm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxh
bjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93
IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBP
T00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAx
NQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggMTcxMWUwNDhkYzc0
ZjVkMzJmZGU0YTJkOGM0MWQzNTRkMmQ3Mjc0ZC4uYjIwYjU0YjMyMjcwNTViMTc5NTdkNjMzN2E4
MGY5NTE1YmIyZTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNTIsMTAgKzUyLDkg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJn
TGlzdChleGVjKSkpOwogfQogCi1XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgs
IHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSkKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHdhc21G
dW5jdGlvbikKICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwg
bV93YXNtRW50cnlwb2ludENvZGUod2FzbUVudHJ5cG9pbnRDb2RlKQotICAgICwgbV9zaWduYXR1
cmVJbmRleChzaWduYXR1cmVJbmRleCkKKyAgICAsIG1fd2FzbUZ1bmN0aW9uKHdhc21GdW5jdGlv
bikKIHsgfQogCiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCkBA
IC02Myw3ICs2Miw3IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bjo6aW5mbygpKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rp
b24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBu
YW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
PndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBj
b2RlQmxvY2stPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKKyAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oc2lnbmF0
dXJlSW5kZXgsIGNvZGVCbG9jay0+d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRl
eCkpKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUs
IGZ1bmN0aW9uLCBjb2RlQmxvY2spOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaAppbmRleCBlOTYzN2Q3OWFhODU3YzBlNDVmOGYwZTc5NmY5ODdhOTM0MTQ2MmZlLi45ZjZk
MzQ2ZmIzZTQ3MDBlMDQ5NDM0YTRkZTgzMWI1ZTRlMmE4Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmgKQEAgLTQzLDggKzQzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2ln
bmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiwgV2FzbTo6U2lnbmF0dXJl
SW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlSW5kZXg7IH0KLSAgICB2b2lkKiB3
YXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fd2FzbUVudHJ5cG9pbnRDb2RlOyB9CisgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3dhc21G
dW5jdGlvbi5zaWduYXR1cmVJbmRleDsgfQorICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uICB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fd2Fz
bUZ1bmN0aW9uLmNvZGU7IH0KKyAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIGNhbGxhYmxlRnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbjsgfQogICAgIEpTT2JqZWN0KiBm
dW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgpAQCAt
NTMsMTcgKzU0LDE2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U09iamVjdCosIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXgsIHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSk7CisgICAgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFdhc206OkNhbGxhYmxlRnVuY3Rpb24pOwogCiAgICAgLy8gV2Uga2VlcCBhIHJlZmVyZW5jZSB0
byBvdXIgQ29kZUJsb2NrIGJlY2F1c2Ugd2UgaGF2ZSBhIHJhdwogICAgIC8vIHBvaW50ZXIgdG8g
YXNtIGNvZGUgdGhhdCBpdCBvd25zLgogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rp
b247Ci0gICAgdm9pZCogbV93YXNtRW50cnlwb2ludENvZGU7Ci0gICAgLy8gSXQncyBzYWZlIHRv
IGp1c3QgaG9sZCB0aGUgcmF3IHNpZ25hdHVyZUluZGV4IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVy
ZW5jZQorICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxsYWJsZUZ1bmN0
aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBDb2RlQmxvY2ss
IHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCi0gICAg
Ly8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2Nh
dGVkLgotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CisgICAgLy8g
ZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxv
Y2F0ZWQuCisgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBtX3dhc21GdW5jdGlvbjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rl
c3RzL0NoYW5nZUxvZwppbmRleCBmZjUyYTE0ZjkyODQ5NTUzMDQ5ZWM1YzRiMTgzNzM2ZjM2MWNi
NjdjLi4zODk0YTRjZGVhZGZjYjAzZjg4NjJkMTc4OWNmNGFhMzNhYmMzM2U4IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE3LTA0LTI2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5OiBJbXBsZW1lbnQgdGllciB1cAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTM0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL3Ry
YXAtYWZ0ZXItY3Jvc3MtaW5zdGFuY2UtY2FsbC5qczoKKyAgICAgICAgKiB3YXNtL3RpZXItdXAv
anMtdG8td2FzbS5qczogQWRkZWQuCisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKiB3
YXNtL3RpZXItdXAvd2FzbS10by13YXNtLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRlc3Qp
OgorCiAyMDE3LTA0LTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjE1NDc2LgpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RyYXAtYWZ0ZXItY3Jvc3MtaW5zdGFuY2UtY2Fs
bC5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90cmFwLWFmdGVyLWNyb3NzLWluc3Rh
bmNlLWNhbGwuanMKaW5kZXggY2FjM2Q2ZTRlODA3NzY2NjRhMTE0NTcwZDM0OWVkN2NjMDgwMTE3
Yy4uZDQzMGVmMTAyNWY2N2Q2MjM5NThiNWQ1MjFkMTBhMTEyMjRiYzIyMSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RyYXAtYWZ0ZXItY3Jvc3MtaW5zdGFuY2UtY2Fs
bC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdHJhcC1hZnRlci1jcm9zcy1p
bnN0YW5jZS1jYWxsLmpzCkBAIC01OSw2ICs1OSw2IEBAIGZ1bmN0aW9uIHdhc21GcmFtZUNvdW50
RnJvbUVycm9yKGUpIHsKIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CiAgICAgY29u
c3QgZTEgPSBhc3NlcnQudGhyb3dzKCgpID0+IGZvbzEobnVtUGFnZXMgKiBwYWdlU2l6ZSArIDEp
LCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3Mi
KTsKICAgICBhc3NlcnQuZXEod2FzbUZyYW1lQ291bnRGcm9tRXJyb3IoZTEpLCAyKTsKLSAgICBj
b25zdCBlMiA9IGFzc2VydC50aHJvd3MoKCkgPT4gZm9vMShudW1QYWdlcyAqIHBhZ2VTaXplICsg
MSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2Vz
cyIpOworICAgIGNvbnN0IGUyID0gYXNzZXJ0LnRocm93cygoKSA9PiBmb28yKG51bVBhZ2VzICog
cGFnZVNpemUgKyAxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBt
ZW1vcnkgYWNjZXNzIik7CiAgICAgYXNzZXJ0LmVxKHdhc21GcmFtZUNvdW50RnJvbUVycm9yKGUy
KSwgMik7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdGllci11cC9qcy10by13YXNtLmpz
IGIvSlNUZXN0cy93YXNtL3RpZXItdXAvanMtdG8td2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTM5MTM5
NzBhNGE1MGQyNjI2ZWMxYmE2MjVkZDIwZGY4YzMyZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3RpZXItdXAvanMtdG8td2FzbS5qcwpAQCAtMCwwICsxLDI1IEBACitpbXBvcnQg
KiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4u
L0J1aWxkZXIuanMnOworCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGxldCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZv
byIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigi
Zm9vIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuSTMyQ29uc3Qo
NDIpCisgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCB7aW5zdGFuY2V9ID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7fSk7
CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDA7IGkrKykKKyAgICAgICAgYXNzZXJ0
LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIDQyKTsKK30KKworYXNzZXJ0LmFzeW5jVGVzdCh0
ZXN0KCkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3RpZXItdXAvd2FzbS10by13YXNtLmpz
IGIvSlNUZXN0cy93YXNtL3RpZXItdXAvd2FzbS10by13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyN2Q5
MGQ3Zjk0NTg0NDUwYmEyNDAxNzMxMzUyMmQ0ODdkOGNiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3dhc20vdGllci11cC93YXNtLXRvLXdhc20uanMKQEAgLTAsMCArMSw0NyBAQAoraW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJzsKKworYXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBsZXQgYnVp
bGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRnVuY3Rp
b24oImZvbyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0sIFsiaTMyIl0pCisgICAg
ICAgIC5CbG9jaygiaTMyIikKKyAgICAgICAgLkxvb3AoImkzMiIsIGIgPT4KKyAgICAgICAgICAg
ICAgICBiLkdldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAg
ICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgLkJySWYoMSkKKworICAgICAgICAg
ICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAg
ICAgICAgLkkzMkFkZCgpCisgICAgICAgICAgICAgICAgLlNldExvY2FsKDEpCisgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgLlNldExvY2FsKDApCisgICAgICAg
ICAgICAgICAgLkJyKDApCisKKyAgICAgICAgKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IHtpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJs
eS5pbnN0YW50aWF0ZShiaW4sIHt9KTsKKworICAgIGNvbnN0IGl0ZXJzID0gMTAwMDAwCisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuZm9vKGl0ZXJzKSwgNDIgKiBpdGVycyk7Cit9CisKK2Fzc2VydC5hc3luY1Rlc3Qo
dGVzdCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308304</attachid>
            <date>2017-04-26 16:29:52 -0700</date>
            <delta_ts>2017-04-26 16:31:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170134-20170426162951.patch</filename>
            <type>text/plain</type>
            <size>157137</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NGI2YWQ5MWEyYWU2NTBiNWU1MTkyNDgxNzc2YmJlZmZjZjcyODAzLi43NDcxYWQzM2VmNGNhOGMw
YjBiZWM5NTIxZDM0MjZkMTcwMWIxNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTAgQEAKKzIwMTctMDQtMjYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IEltcGxlbWVudCB0aWVyIHVwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
ZW5zdXJlQ2FjaGVMaW5lU3BhY2UpOgorICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24u
aDoKKyAgICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uVGhyZWFkU2FmZU5lYXJDYWxsOjpDb2RlTG9j
YXRpb25UaHJlYWRTYWZlTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjp0aHJl
YWRTYWZlTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6dGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKToKKyAgICAgICAgKiBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6aW5zdCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlNodWZmbGVQYWlyOjpvcGNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvblRl
c3RXYXNtTW9kdWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxvY2spOgorICAgICAgICAqIHJ1bnRpbWUv
T3B0aW9ucy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
QmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwLgorICAgICAgICAoSlND
OjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
c3RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjptb3ZlVG9TdGF0ZSk6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6OlRocmVhZENvdW50SG9sZGVyKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6VGhyZWFkQ291bnRIb2xkZXI6On5UaHJlYWRDb3VudEhv
bGRlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oldh
c206OkJCUVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaC4KKyAgICAgICAgKiB3
YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbklubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUu
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjplbnRyeXBvaW50KToKKyAgICAgICAgKiB3
YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNv
ZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OnRpZXJVcENvdW50KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q29kZUJsb2NrOjptb2RlKToKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q2FsbGFibGVGdW5jdGlvbjo6Q2FsbGFibGVGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6Oldhc206OkNhbGxhYmxlRnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmguCisg
ICAgICAgIChKU0M6Oldhc206Ondhc21UaHJlYWRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6c3Rh
cnRUcmFja2luZ0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXNldEluc3Ry
dWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMpOgorICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJl
YWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
aC4KKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpt
YWtlVmFsaWRhdGlvblJlc3VsdCk6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VWYWxpZGF0aW9u
Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlU3luYyk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyk6CisgICAgICAgICogd2Fz
bS9XYXNtTW9kdWxlLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29kZUJsb2NrRm9y
KToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cnVuT01HUGxhbkZvckluZGV4KToKKyAgICAgICAg
KiB3YXNtL1dhc21PTUdQbGFuLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuSW5saW5lcy5oLgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
cnVuQ29tcGxldGlvblRhc2tzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6YWRkQ29tcGxl
dGlvblRhc2spOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OnN0YXRlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bW92
ZVRvU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cHJlcGFy
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlRocmVhZENvdW50SG9sZGVy
OjpUaHJlYWRDb3VudEhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OlRocmVhZENvdW50SG9sZGVyOjp+VGhyZWFkQ291bnRIb2xkZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6Y29tcGxldGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZXhwb3J0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OmludGVybmFsRnVuY3Rpb25Db3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRha2VNb2R1bGVJbmZvcm1hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRha2VDYWxsTGlua0luZm9zKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpoYXNXb3JrKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6aGFzQmVlblByZXBhcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmguCisgICAgICAgIChKU0M6Oldhc206OlRpZXJV
cENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojps
b29wRGVjcmVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OmZ1bmN0aW9u
RW50cnlEZWNyZW1lbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6c2hvdWxk
U3RhcnRUaWVyVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6Y291bnQpOgor
ICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21Xb3Jr
bGlzdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6bmV4dFRpY2tldCk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6d2FzbVRvSnNDYWxs
U3R1YkZvckltcG9ydCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Ondh
c21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0
aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbik6CisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGxhYmxlRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2FzbUVudHJ5cG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRP
Zldhc21FbnRyeXBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246Ondhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNhbGxhYmxlRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOiBEZWxl
dGVkLgorCiAyMDE3LTA0LTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjE1NDc2LgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDM0YTdjZTcwNGE5YzdkMWNhODBjZTQxMzM5YmU0
OGQ5MDQwNTkxY2YuLjAxOTA1Zjg2NjM0N2FmNDJhMjViM2JiYjZlM2YwM2NlODg4MThiMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTkzNyw2ICs5MzcsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogICAg
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisgICAgd2FzbS9XYXNtQkJRUGxhbi5jcHAKICAg
ICB3YXNtL1dhc21CaW5kaW5nLmNwcAogICAgIHdhc20vV2FzbUNhbGxlZS5jcHAKICAgICB3YXNt
L1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAKQEAgLTk0NCwxNCArOTQ1LDE2IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgd2FzbS9XYXNtQ29udGV4dC5jcHAKICAgICB3YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCiAgICAgd2FzbS9XYXNtRm9ybWF0LmNwcAorICAgIHdh
c20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAogICAgIHdhc20vV2FzbU1lbW9yeS5jcHAKICAgICB3
YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKICAgICB3YXNtL1dhc21Nb2R1bGUuY3BwCiAg
ICAgd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCiAgICAgd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmNwcAorICAgIHdhc20vV2FzbU9NR1BsYW4uY3BwCisgICAgd2FzbS9XYXNtT3Bjb2RlT3Jp
Z2luLmNwcAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5jcHAKICAgICB3YXNtL1dhc21QbGFuLmNw
cAotICAgIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKICAgICB3YXNtL1dhc21TaWduYXR1cmUu
Y3BwCiAgICAgd2FzbS9XYXNtVGh1bmtzLmNwcAogICAgIHdhc20vV2FzbVZhbGlkYXRlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyNWIzY2ZiODUzMDJiODkwZjIwNjdkMTY1
YzlkODdhNmU5Y2NmOGM2Li5lNjkwMWMxYzlkNjg1ZmQyODVhMjM5OGQwODEwZDQwZDNkMGFlMjZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM0MCw2ICsxMzQwLDggQEAKIAkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFF
NzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzBGQjMwMjFFN0EwQjZF
MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0
LmggKi87IH07CiAJCTUzMEZCMzA0MUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDMx
RTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi87IH07CisJCTUzMTFCRDRBMUVB
NTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ0ODFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9N
R1BsYW4uY3BwICovOyB9OworCQk1MzExQkQ0QjFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1Bs
YW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFC
RDQ5MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5oICovOyB9OwogCQk1MzEzNzRCRDFE
NUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5o
ICovOyB9OwogCQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1
MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1
MDBBIC8qIFdhc21PcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzNzQsMTAgKzEzNzYsMTUg
QEAKIAkJNTNCMEJFMzgxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNC
MEJFMzcxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwICov
OyB9OwogCQk1M0M2RkVFRjFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRUUxRThB
REZBOTAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTNDNkZFRjExRThB
RkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdh
c21PcGNvZGVPcmlnaW4uY3BwICovOyB9OworCQk1M0NBNzMwOTFFQTUzM0Q4MDA3NjA0OUQgLyog
V2FzbUJCUVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNDQTczMDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLzsgfTsK
KwkJNTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0NBNzMwODFFQTUzM0Q4MDA3NjA0
OUQgLyogV2FzbUJCUVBsYW4uaCAqLzsgfTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8q
IEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1
ZS5oICovOyB9OwogCQk1M0Q0NDRERTFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1Zh
bHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RDQ0NEREMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovOyB9Owog
CQk1M0U3NzdFMzFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTc3N0UxMUU5
MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovOyB9OwogCQk1M0U3
NzdFNDFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U3NzdFMjFFOTJFMjY1MDA3
Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggKi87IH07CisJCTUzRTlFMEFCMUVBRTgz
REYwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdh
c21NYWNoaW5lVGhyZWFkcy5jcHAgKi87IH07CisJCTUzRTlFMEFDMUVBRTgzREYwMEZFRTI1MSAv
KiBXYXNtTWFjaGluZVRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVh
ZHMuaCAqLzsgfTsKKwkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3Vu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUw
QUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFC
NiAvKiBXYXNtU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsg
fTsKIAkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5
MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RDFE
NTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJz
ZXIuaCAqLzsgfTsKQEAgLTEzODYsNyArMTM5Myw3IEBACiAJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBh
cnNlci5oICovOyB9OwogCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi87IH07CiAJ
CTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1
M0Y4RDIwMDFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y4RDFGRjFFODM4N0Q0MDBEMjEx
MTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi87IH07CisJCTUzRjhEMjAwMUU4Mzg3RDQwMEQyMTEx
NiAvKiBXYXNtQkJRUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklu
bGluZXMuaCAqLzsgfTsKIAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkw
MDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJB
RTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi87IH07CiAJCTUzRkQwNEQzMUQ3QUIyNzcwMDMyODdEMyAvKiBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVu
dGlvbi5jcHAgKi87IH07CkBAIC0zODU3LDYgKzM4NjQsOCBAQAogCQk1MkY2QzM1QzFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVdvcmtsaXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENDgxRUE1ODFFNTAwNTI1MjgxIC8q
IFdhc21PTUdQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21PTUdQbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENDkxRUE1
ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21PTUdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3
NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEz
NzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zODk2LDEwICszOTA1LDE1IEBACiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJ
bnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdp
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAv
KiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJCUVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJCUVBsYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFk
ZHJlc3NWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21BZGRy
ZXNzVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUFkZHJlc3NWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0Q0NDRERDFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVz
c1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUFk
ZHJlc3NWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRTc3N0UyMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRTlFMEE5MUVBRTgzREUwMEZFRTI1MSAvKiBX
YXNtTWFjaGluZVRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTWFjaGluZVRocmVhZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVy
VXBDb3VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGllclVwQ291
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRC
NzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2Vj
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNlY3Rpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAv
KiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zOTA5
LDcgKzM5MjMsNyBAQAogCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFC
NiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0Y4
RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbUJCUVBsYW5JbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21CQlFQbGFuSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQg
LyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFF
MjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYz
MzMsNiArNjM0Nyw5IEBACiAJCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHkuaCAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5jcHAgKi8sCisJCQkJNTNDQTczMDgxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmgg
Ki8sCisJCQkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5o
ICovLAogCQkJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5jcHAgKi8s
CiAJCQkJQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi8sCiAJCQkJ
NTI1QzBERDcxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwICovLApAQCAtNjM0Nyw2
ICs2MzY0LDggQEAKIAkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5j
cHAgKi8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLywK
IAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8s
CisJCQkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAg
Ki8sCisJCQkJNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5o
ICovLAogCQkJCTc5MDA4MTM2MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxlLmNwcCAqLywK
IAkJCQk3OTAwODEzNzFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5oICovLAogCQkJCTUz
NTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLywKQEAgLTYzNTcsNiAr
NjM3Niw4IEBACiAJCQkJNTNFNzc3RTIxRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxl
UGFyc2VyLmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVs
ZVBhcnNlci5oICovLAorCQkJCTUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxh
bi5jcHAgKi8sCisJCQkJNTMxMUJENDkxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmgg
Ki8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICov
LAogCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcCAqLywKIAkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oICovLApAQCAtNjM2NiwxMiArNjM4NywxMiBAQAogCQkJCTUzRjQwRThDMUQ1OTAx
RjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3
QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyog
V2FzbVBsYW4uaCAqLywKLQkJCQk1M0Y4RDFGRjFFODM4N0Q0MDBEMjExMTYgLyogV2FzbVBsYW5J
bmxpbmVzLmggKi8sCiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9u
cy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNw
cCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICov
LAogCQkJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLywKIAkJ
CQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAorCQkJCTUzRTlF
MEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywKIAkJCQk1M0ZGN0Y5
QTFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFE
QkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi8sCiAJCQkJNTMwRkIzMDMxRTdBMTE0
NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8sCkBAIC04OTA5LDYgKzg5MzAsNyBAQAog
CQkJCTc5NkRBQTJCMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21C
QlFQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyog
SklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTI1Niw3ICs5Mjc4LDcgQEAKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyog
UmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyog
UmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4
MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNGOEQyMDAxRTgz
ODdENDAwRDIxMTE2IC8qIFdhc21QbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNG
OEQyMDAxRTgzODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4
cElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAv
KiBSZWdFeHBLZXkuaCBpbiBIZWFkZXJzICovLApAQCAtOTMyMywxMCArOTM0NSwxMiBAQAogCQkJ
CUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYx
NjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0U5RTBB
QzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2lu
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogU3Bl
Y3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYy
NiAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRTlFMEFGMUVB
RUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
M0FDNzUyMTgzRUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2REI3RTkxRDYxMjRCNTAwQ0RCRjhFIC8qIFN0YWNrRnJhbWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QzFFQUYyMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTM3NCw2ICs5Mzk4LDcgQEAKIAkJCQkwRkEyQzE3QzE3RDdDRjg0MDA5
RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM0MjIxMjFE
NkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJE
NEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MzExQkQ0QjFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05h
dGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA3OCw2ICsxMDEwMyw3IEBACiAJ
CQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjRCNENBMUU4ODlEN0IwMERCQkU4NiAvKiBCM1ZhcmlhYmxlTGl2ZW5l
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0NBNzMwOTFFQTUzM0Q4
MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwRkIzMDQx
RTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzMzhERjUxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTgyLDYgKzEwMjA4LDcgQEAKIAkJCQkxNDdGMzlD
MjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMxMUJENEExRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21P
TUdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAv
KiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDc5MTg5QjA1MTAw
MDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTU3MTRC
RjFDRDgwNEE0MDAwNEQyQzYgLyogQ29uc29sZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTEwMjY3LDYgKzEwMjk0LDcgQEAKIAkJCQkwRjNCRDFCNzFCODk2QTA3MDA1OThBQTYgLyogREZH
SW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzODFCOTM3MUU2MEU5NjYwMDkw
Rjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0U5RTBBQjFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODk4RjMxMUIyNzY4OUYwMDgz
QTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMzE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKaW5k
ZXggMmViNDUxZDVkNDE3OTJlMjcyYWZiNDRmYWNlN2MwMmUzMGMyZDcyYy4uNzZlZGU1OTFiZDQ1
ODE4NjY5M2RiMjBkZjMzMjE3NGZiZWI4YjJjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTUyMCw4
ICs1MjAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgTGlua2FibGUgPSAweDEsCiAgICAgICAg
ICAgICBOZWFyID0gMHgyLAogICAgICAgICAgICAgVGFpbCA9IDB4NCwKKyAgICAgICAgICAgIFRo
cmVhZFNhZmUgPSAweDgsCiAgICAgICAgICAgICBMaW5rYWJsZU5lYXIgPSAweDMsCiAgICAgICAg
ICAgICBMaW5rYWJsZU5lYXJUYWlsID0gMHg3LAorICAgICAgICAgICAgVGhyZWFkU2FmZUxpbmth
YmxlTmVhciA9IDB4YgogICAgICAgICB9OwogCiAgICAgICAgIENhbGwoKQpAQCAtMTAxOCw2ICsx
MDIwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgYnVmZmVyLnNldENvZGVTaXplKHRhcmdldENvZGVT
aXplKTsKICAgICB9CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGd1YXJlbnRlZXMgdGhlIG5leHQg
aW5zdHJ1Y3Rpb25TaXplIGJ5dGVzIG9mIGluc3RydWN0aW9ucyB3aWxsIGJlIGluIHRoZSBzYW1l
IGNhY2hlIGxpbmUuCisgICAgdm9pZCBlbnN1cmVDYWNoZUxpbmVTcGFjZShzaXplX3QgaW5zdHJ1
Y3Rpb25TaXplKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlcGxhY2UgNjQgd2l0aCB0aGUg
cmVhbCBjYWNoZWxpbmUgc2l6ZSBvbmNlIHdlIHN3aXRjaCB0byBDKysxNy4KKyAgICAgICAgY29u
c3Qgc2l6ZV90IGNhY2hlTGluZVNpemUgPSA2NDsKKyAgICAgICAgQVNTRVJUKGluc3RydWN0aW9u
U2l6ZSA8PSBjYWNoZUxpbmVTaXplKTsKKyAgICAgICAgc2l6ZV90IGNvZGVTaXplID0gbV9hc3Nl
bWJsZXIuY29kZVNpemUoKTsKKyAgICAgICAgYXV0byBjYWNoZUFsaWduZWRCZWZvcmUgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8Y2FjaGVMaW5lU2l6ZT4oY29kZVNpemUpOworICAgICAgICBh
dXRvIGNhY2hlQWxpZ25lZEFmdGVyID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPGNhY2hlTGlu
ZVNpemU+KGNvZGVTaXplICsgaW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgaWYgKGNhY2hlQWxp
Z25lZEJlZm9yZSA9PSBjYWNoZUFsaWduZWRBZnRlcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBzaXplX3QgbnVtYmVyT2ZOb3BzID0gY2FjaGVBbGlnbmVkQmVmb3JlIC0gY29kZVNp
emU7CisgICAgICAgIGVtaXROb3BzKG51bWJlck9mTm9wcyk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2Uo
MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmlu
ZGV4IGExMTVlYzNkNjQxZDVkYTVhNDllOTRkZTg3ZDNkZTdmZmFmZGM1OGUuLjg1N2QwYTlhZGQz
MDM5ODUxYWIzZDczYjU0YTJmZjRmOGM5N2M3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApAQCAtMTI1LDYgKzEyNSwxNyBAQCBwcml2YXRl
OgogICAgIE5lYXJDYWxsTW9kZSBtX2NhbGxNb2RlID0gTmVhckNhbGxNb2RlOjpSZWd1bGFyOwog
fTsKIAorCisvLyBUaGlzIGNsYXNzIGlzIGp1c3QgYSB3cmFwcGVyIHRoYXQgZm9yY2VzIHVzIHRv
IGNhbGwgdGhlIHRocmVhZCBzYWZlIHBhdGNoaW5nIGZ1bmN0aW9ucy4KK2NsYXNzIENvZGVMb2Nh
dGlvblRocmVhZFNhZmVOZWFyQ2FsbCB7CitwdWJsaWM6CisgICAgQ29kZUxvY2F0aW9uVGhyZWFk
U2FmZU5lYXJDYWxsKENvZGVMb2NhdGlvbk5lYXJDYWxsJiYgY2FsbCkKKyAgICAgICAgOiBuZWFy
Q2FsbChzdGQ6OmZvcndhcmQ8Q29kZUxvY2F0aW9uTmVhckNhbGw+KGNhbGwpKQorICAgIHsKKyAg
ICB9CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNhbGw7Cit9OworCiBjbGFzcyBDb2Rl
TG9jYXRpb25EYXRhTGFiZWwzMiA6IHB1YmxpYyBDb2RlTG9jYXRpb25Db21tb24gewogcHVibGlj
OgogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKCkge30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggMDVlNzQw
MDUxMzNlMTkzNDIxNjE2NzllMjVhODA5MmMyMjUxMmY4ZS4uZjc2NGE5NGFmNjA5ZmVjZmJmNTVh
M2RkNTRmNWQ2MDU2YjkyNjkwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTMwODcsNiArMzA4NywxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBDYWxsKGxhYmVsLCBDYWxsOjpMaW5rYWJsZU5lYXJUYWls
KTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIENhbGwgdGhyZWFkU2FmZVBhdGNoYWJsZU5l
YXJDYWxsKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJsKCk7CisgICAgICAgIHJldHVy
biBDYWxsKG1fYXNzZW1ibGVyLmxhYmVsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAgfQor
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJldCgpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5yZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAppbmRleCBkY2Y4MDdlZjM0ZDBjZDg4ZDI0NzcwYmM5
MTdlMzQ0YTJlNTBkNzUzLi44ZWMwZWFkMmYyNTdmMmU0NGRhMGQ5YzMxNDc2ZjIzM2Q3MjFjZDhi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC0yODQ0LDYgKzI4NDQsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlTmVhcik7
CiAgICAgfQogCisgICAgQ2FsbCB0aHJlYWRTYWZlTmVhckNhbGwoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxsOjpUaHJlYWRTYWZlTGlua2FibGVO
ZWFyKTsKKyAgICB9CisKICAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewog
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKHRhcmdldCksIENhbGw6Ok5vbmUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCmluZGV4IDZlN2FkNWU4ZDdkZDc1NTY4NmE0NWFjOTZmMDJjYjFhZTQ1OTk2
NGEuLjMxMzE4MmU4Y2M2NjlkOWFlY2EzMTQyNzcxYjQzZjIzZDkxM2UzYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKQEAgLTI0Nyw2ICsyNDcsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbDo6ZnJv
bVRhaWxKdW1wKG5ld0p1bXApOwogICAgIH0KIAorICAgIENhbGwgdGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCkKKyAgICB7CisgICAgICAgIGNvbnN0IHNpemVfdCBuZWFyQ2FsbE9wY29kZVNp
emUgPSAxOworICAgICAgICBjb25zdCBzaXplX3QgbmVhckNhbGxSZWxhdGl2ZUxvY2F0aW9uU2l6
ZSA9IHNpemVvZihpbnQzMl90KTsKKyAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhl
IDMyLWJpdCBuZWFyIGNhbGwgaW1tZWRpYXRlIGlzIDMyLWJpdCBhbGlnbmVkLgorICAgICAgICBz
aXplX3QgY29kZVNpemUgPSBtX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworICAgICAgICBzaXplX3Qg
YWxpZ25lZFNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8bmVhckNhbGxSZWxhdGl2ZUxv
Y2F0aW9uU2l6ZT4oY29kZVNpemUgKyBuZWFyQ2FsbE9wY29kZVNpemUpOworICAgICAgICBlbWl0
Tm9wcyhhbGlnbmVkU2l6ZSAtIChjb2RlU2l6ZSArIG5lYXJDYWxsT3Bjb2RlU2l6ZSkpOworICAg
ICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBEYXRhTGFiZWxQdHIodGhpcyk7CisgICAgICAgIENh
bGwgcmVzdWx0ID0gbmVhckNhbGwoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChsYWJlbCwgZGlm
ZmVyZW5jZUJldHdlZW4obGFiZWwsIHJlc3VsdCkgPT0gKG5lYXJDYWxsT3Bjb2RlU2l6ZSArIG5l
YXJDYWxsUmVsYXRpdmVMb2NhdGlvblNpemUpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVk
SW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAppbmRleCAwNTQ2NTUzODIz
YzliYzIxYzUzNmVhMTQ0ZDA3OTUzNDgwNWNmY2RmLi41ZTEwMTM2YTdiMDc5MmY3Njc3YjdlNjUx
ZDgzNWIwYWJkM2RlYzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckVtaXRTaHVmZmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVtaXRTaHVmZmxlLmNwcApAQCAtODEsMTggKzgxLDE3IEBAIEJhbmsgU2h1ZmZsZVBhaXI6OmJh
bmsoKSBjb25zdAogICAgIHJldHVybiBGUDsKIH0KIAotT3Bjb2RlIFNodWZmbGVQYWlyOjpvcGNv
ZGUoKSBjb25zdAotewotICAgIHJldHVybiBtb3ZlRm9yKGJhbmsoKSwgd2lkdGgoKSk7Ci19Ci0K
IEluc3QgU2h1ZmZsZVBhaXI6Omluc3QoQ29kZSogY29kZSwgVmFsdWUqIG9yaWdpbikgY29uc3QK
IHsKICAgICBpZiAoVU5MSUtFTFkoc3JjKCkuaXNNZW1vcnkoKSAmJiBkc3QoKS5pc01lbW9yeSgp
KSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlKTsKLSAgICAgICAgcmV0dXJuIEluc3Qo
b3Bjb2RlKCksIG9yaWdpbiwgc3JjKCksIGRzdCgpLCBjb2RlLT5uZXdUbXAoYmFuaygpKSk7Cisg
ICAgICAgIHJldHVybiBJbnN0KG1vdmVGb3IoYmFuaygpLCB3aWR0aCgpKSwgb3JpZ2luLCBzcmMo
KSwgZHN0KCksIGNvZGUtPm5ld1RtcChiYW5rKCkpKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3Qo
b3Bjb2RlKCksIG9yaWdpbiwgc3JjKCksIGRzdCgpKTsKKworICAgIGlmIChzcmMoKS5pc1NvbWVJ
bW0oKSkKKyAgICAgICAgcmV0dXJuIEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmJpZ0ltbShzcmMo
KS52YWx1ZSgpKSwgZHN0KCkpOworCisgICAgcmV0dXJuIEluc3QobW92ZUZvcihiYW5rKCksIHdp
ZHRoKCkpLCBvcmlnaW4sIHNyYygpLCBkc3QoKSk7CiB9CiAKIHZvaWQgU2h1ZmZsZVBhaXI6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRW1pdFNodWZmbGUuaAppbmRleCBhYTE3ZGJiYTA5NjFiMzFiMWZlY2Y0NjBiNjJmZjEx
MWYxYTVhYjE5Li5lNGQxYmQ4MTkxY2VmMmQyODhiMGU3MzlmNjMxY2E4YjNmM2E5OTZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCkBAIC03Myw4
ICs3Myw3IEBAIHB1YmxpYzoKICAgICBXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lk
dGg7IH0KICAgICAKICAgICBCYW5rIGJhbmsoKSBjb25zdDsKLSAgICBPcGNvZGUgb3Bjb2RlKCkg
Y29uc3Q7Ci0gICAgCisKICAgICAvLyBDcmVhdGVzIGFuIGluc3RydWN0aW9uIGZvciB0aGUgbW92
ZSByZXByZXNlbnRlZCBieSB0aGlzIHNodWZmbGUgcGFpci4gWW91IG5lZWQgdG8gcGFzcwogICAg
IC8vIENvZGUgaWYgdGhpcyBpcyBhIG1lbW9yeS0+bWVtb3J5IHBhaXIuIFlvdSBjYW4gcGFzcyBu
dWxsIGlmIHlvdSBrbm93IHRoYXQgaXQncyBub3QuIEluCiAgICAgLy8gZmFjdCwgcGFzc2luZyBu
dWxsIGlzIGEgZ29vZCB3YXkgdG8gYXNzZXJ0IHRoYXQgdGhpcyBpcyBub3QgYSBtZW1vcnktPm1l
bW9yeSBwYWlyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAxODllNzk1YjY3MDJjY2JmYWU1NDQ5
MWRhNGQzOTcwMTJhYmViYjNhLi43ZmZhZjY0ODlmODUxMjc5ZDU2MTlhZjk4ZjJhMDA4ZmVhYjU3
NDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNzQsMTEgKzc0LDExIEBACiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCisjaW5jbHVkZSAiV2FzbUJCUVBsYW5JbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAjaW5jbHVkZSAi
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKLSNpbmNs
dWRlICJXYXNtUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNs
dWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTkxLDcgKzMxOTEsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxl
RnVuY3Rpb25zKEV4ZWNTdGF0ZSogZQogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
ZnVuY3Rpb25Db3VudCArIDIpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBSZWY8V2FzbTo6UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6UGxhbih2bSwgc3RhdGljX2Nhc3Q8dWludDhf
dCo+KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBXYXNtOjpQbGFuOjpGdWxs
Q29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBSZWY8V2FzbTo6QkJR
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2FzbTo6QkJRUGxhbih2bSwgc3RhdGljX2Nhc3Q8
dWludDhfdCo+KHNvdXJjZS0+dmVjdG9yKCkpLCBzb3VyY2UtPmxlbmd0aCgpLCBXYXNtOjpCQlFQ
bGFuOjpGdWxsQ29tcGlsZSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgIFdhc206OmVu
c3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25vdXNseShwbGFuLmdldCgpKTsKICAg
ICBpZiAocGxhbi0+ZmFpbGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suY3BwCmluZGV4IDYzMjJlNzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEzZGE1YzQxOTUxNjQuLmMx
NzVhZTBjNDgyZWQyN2JkNWY2YmRjODc5NjhlNzVkNDVhZjUwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlICJT
YW1wbGluZ1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5j
bHVkZSA8dGhyZWFkPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0Myw2ICsxNDQsOSBAQCB2b2lk
IEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIG1fdm0tPnNldExhc3RTdGFja1RvcCh0aHJl
YWREYXRhLnNhdmVkTGFzdFN0YWNrVG9wKCkpOwogCiAgICAgbV92bS0+aGVhcC5tYWNoaW5lVGhy
ZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
V2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgogCiAgICAgbV92bS0+
dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCmluZGV4IDA2ZDBmMGQ4ZDAwMzM2NmJlYjc2MDkzZGI3ZjFiM2Q3OGVmZmQy
NWYuLmQ2NzI0YzVhN2NkNmMwYjM1N2M0OTk3YjNhZTI5ZjU1ZDVkYjNmMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQzNCw3ICs0MzQsMTIgQEAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgZmFpbFRvQ29t
cGlsZVdlYkFzc2VtYmx5Q29kZSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIG5vIFdhc206OlBs
YW4gd2lsbCBzdWNlc3NmdWxseSBjb21waWxlIGEgZnVuY3Rpb24uIikgXAogICAgIHYoc2l6ZSwg
d2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3JtYWwsICJMaW1pdCBvbiB0
aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBzaG91bGQgYXR0ZW1wdCBi
ZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAotICAgIHYodW5zaWduZWQsIHdlYkFz
c2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwg
Tm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNzZW1ibHkgbW9kdWxlcy4i
KSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCwgMSwg
Tm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5IG1vZHVs
ZSBjb21waWxhdGlvbnMuIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1p
emF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9w
dGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25z
LiIpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCwg
NTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBhIGZ1bmN0aW9u
IHRvIE9NRy4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVjcmVtZW50LCAx
NSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50
ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKKyAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJs
eUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIg
dXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50cnkuIikgXAog
ICAgIFwKICAgICAvKiBGSVhNRTogZW5hYmxlIGZhc3QgbWVtb3JpZXMgb24gaU9TIGFuZCBwcmUt
YWxsb2NhdGUgdGhlbS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MDc3NCAqLyBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksICFpc0lPUygp
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBz
cGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIp
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAppbmRleCBjNmQ0ODAwYzJhNWE5NjY4NDUzYWJlOGI4YTY0NDRlMjg5YjNjODhhLi42MmI4MzI4
YjY5N2U1NzQxNDA3OWU0YTE3YjBiMTE2OTkyMmM4MDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAj
aW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJz
ZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIK
ICNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgog
I2luY2x1ZGUgPGxpbWl0cz4KQEAgLTE3NCw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgw
KQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVy
ZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSk7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCBUaWVyVXBDb3VudCopOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTIyMywx
MiArMjI0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xF
bnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFj
ayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBh
cnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKIAotICAgIFZhbHVlKiBjb25zdGFudChCMzo6
VHlwZSwgdWludDY0X3QgYml0cyk7CisgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50
NjRfdCBiaXRzLCBzdGQ6Om9wdGlvbmFsPE9yaWdpbj4gPSBzdGQ6Om51bGxvcHQpOwogICAgIHZv
aWQgaW5zZXJ0Q29uc3RhbnRzKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0RXhjZXB0aW9u
Q2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKKyAgICBCYXNpY0Jsb2NrKiBl
bWl0VGllclVwQ2hlY2soQmFzaWNCbG9jayogZW50cnksIHVpbnQzMl90IGRlY3JlbWVudENvdW50
LCBPcmlnaW4pOworCiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXpl
T2ZPcCk7CiAgICAgQjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKICAg
ICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CkBAIC0yNDEsNyArMjQ0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhw
cmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CiAKLSAgICBWYWx1ZSogbWF0ZXJpYWxpemVXYXNtQ29u
dGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7CisgICAgVmFsdWUqIG1hdGVyaWFsaXplV2Fz
bUNvbnRleHQoQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2Nl
ZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5
R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFBy
b2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIApAQCAtMjQ5LDcgKzI1MiwxMSBAQCBwcml2YXRlOgog
CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyOwogICAgIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87Ci0gICAgTWVtb3J5TW9kZSBtX21vZGU7CisgICAg
Y29uc3QgTWVtb3J5TW9kZSBtX21vZGU7CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29t
cGlsYXRpb25Nb2RlOworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleDsKKyAgICBj
b25zdCBUaWVyVXBDb3VudCogbV90aWVyVXA7CisKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAg
ICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xv
Y2FsczsKQEAgLTI3MiwxMCArMjc5LDEwIEBAIGludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQ
b2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAg
cmV0dXJuIG9mZnNldDsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2Fz
bUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKK1ZhbHVlKiBCM0lS
R2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KEJhc2ljQmxvY2sqIGJsb2NrKQogewog
ICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBw
b2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpKTsKICAgICAgICAgaWYgKENDYWxsSGVscGVyczo6bG9hZFdhc21Db250
ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCkBAIC0yODgsNyArMjk1LDcgQEAgVmFsdWUqIEIzSVJH
ZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaykKIAogICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9i
YmVycyB3YXNtQ29udGV4dCByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVl
ZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAvLyBUaGlzIHByZXZlbnRz
IHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUg
cGlubmVkIHJlZ2lzdGVyLgotICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4o
KSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCkpOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3Ry
YWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7CkBAIC0zMjYsOSArMzMzLDEy
IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJv
YywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUg
bW9kZSkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29t
cGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKICAgICA6IG1f
aW5mbyhpbmZvKQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShj
b21waWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAg
ICAsIG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogICAgICwgbV9j
b25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2MpCkBAIC0zNzEsNyArMzgxLDkgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKIAogICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJh
bWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9j
LCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwogCi0gICAgbV9pbnN0YW5jZVZhbHVlID0gbWF0
ZXJpYWxpemVXYXNtQ29udGV4dChtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKKyAgICBtX2N1cnJl
bnRCbG9jayA9IGVtaXRUaWVyVXBDaGVjayhtX2N1cnJlbnRCbG9jaywgVGllclVwQ291bnQ6OmZ1
bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgT3JpZ2luKCkpOworCisgICAgbV9pbnN0YW5jZVZhbHVl
ID0gbWF0ZXJpYWxpemVXYXNtQ29udGV4dChtX2N1cnJlbnRCbG9jayk7CiB9CiAKIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5m
b3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2lj
QmxvY2sqIGJsb2NrKQpAQCAtNDE4LDEwICs0MzAsMTAgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpl
bWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlvblR5cGUgdHlwZSkK
ICAgICB9KTsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNvbnN0YW50KEIzOjpUeXBlIHR5
cGUsIHVpbnQ2NF90IGJpdHMpCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Y29uc3RhbnQoQjM6OlR5
cGUgdHlwZSwgdWludDY0X3QgYml0cywgc3RkOjpvcHRpb25hbDxPcmlnaW4+IG1heWJlT3JpZ2lu
KQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudFBvb2wuZW5zdXJlKFZhbHVlS2V5KG9w
Y29kZUZvckNvbnN0YW50KHR5cGUpLCB0eXBlLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihiaXRzKSks
IFsmXSB7Ci0gICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX3Byb2MuYWRkQ29uc3RhbnQob3JpZ2lu
KCksIHR5cGUsIGJpdHMpOworICAgICAgICBWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZENvbnN0
YW50KG1heWJlT3JpZ2luID8gKm1heWJlT3JpZ2luIDogb3JpZ2luKCksIHR5cGUsIGJpdHMpOwog
ICAgICAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmluc2VydFZhbHVlKDAsIHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSk7CkBAIC00NDAsNyArNDUyLDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
ICAgICAgICAgVmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFkZFZhcmlhYmxlKHRvQjNUeXBlKHR5
cGUpKTsKICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2FsKTsKLSAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3Jp
Z2luKCksIGxvY2FsLCBhZGRDb25zdGFudCh0eXBlLCAwKSk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2Nh
bCwgY29uc3RhbnQodG9CM1R5cGUodHlwZSksIDAsIE9yaWdpbigpKSk7CiAgICAgfQogICAgIHJl
dHVybiB7IH07CiB9CkBAIC04MTcsMjQgKzgyOSw1OSBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNz
aW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bAogICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwogfQogCi1CM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNp
Z25hdHVyZSkKK0Jhc2ljQmxvY2sqIEIzSVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVjayhCYXNp
Y0Jsb2NrKiBlbnRyeSwgdWludDMyX3QgZGVjcmVtZW50Q291bnQsIE9yaWdpbiBvcmlnaW4pCiB7
Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpUb3BMZXZlbCwgbV9wcm9jLmFkZEJsb2NrKCkpOwotfQorICAgIGlmICghbV90aWVy
VXApCisgICAgICAgIHJldHVybiBlbnRyeTsKIAotQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEg
QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCi17Ci0gICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywg
bV9wcm9jLmFkZEJsb2NrKCkpOworICAgIEFTU0VSVCghKGRlY3JlbWVudENvdW50ICUgMikpOwor
ICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYSBwYXRjaHBvaW50LgorICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworCisgICAgQVNTRVJUKG1fdGllclVwKTsK
KyAgICBWYWx1ZSogY291bnREb3duTG9jYXRpb24gPSBjb25zdGFudChwb2ludGVyVHlwZSgpLCBy
ZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihtX3RpZXJVcCksIG9yaWdpbik7CisgICAgVmFsdWUq
IG9sZENvdW50RG93biA9IGVudHJ5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgSW50MzIsIG9yaWdpbiwgY291bnREb3duTG9jYXRpb24pOworICAgIFZhbHVlKiBuZXdDb3Vu
dERvd24gPSBlbnRyeS0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFN1Yiwgb3JpZ2luLCBvbGRD
b3VudERvd24sIGNvbnN0YW50KEludDMyLCBkZWNyZW1lbnRDb3VudCwgb3JpZ2luKSk7CisgICAg
ZW50cnktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luLCBuZXdD
b3VudERvd24sIGNvdW50RG93bkxvY2F0aW9uKTsKKworICAgIFZhbHVlKiB1bmRlckZsb3dlZCA9
IGVudHJ5LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWJvdmUsIG9yaWdpbiwgbmV3Q291bnRE
b3duLCBvbGRDb3VudERvd24pOworCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiB0aWVyVXAg
PSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgZW50cnktPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4sIHVuZGVyRmxvd2VkKTsKKyAgICAgICAgZW50cnktPnNl
dFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRpZXJVcCwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUp
LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICAgICAgdGllclVwLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luLCBFZmZlY3RzOjpmb3JD
YWxsKCksCisgICAgICAgICAgICBjb25zdGFudChwb2ludGVyVHlwZSgpLCByZWludGVycHJldF9j
YXN0PHVpbnQ2NF90PihydW5PTUdQbGFuRm9ySW5kZXgpLCBvcmlnaW4pLAorICAgICAgICAgICAg
bWF0ZXJpYWxpemVXYXNtQ29udGV4dCh0aWVyVXApLAorICAgICAgICAgICAgY29uc3RhbnQoSW50
MzIsIG1fZnVuY3Rpb25JbmRleCwgb3JpZ2luKSk7CisKKyAgICAgICAgdGllclVwLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4sIGNvbnRpbnVhdGlvbik7CisgICAg
fQorCisgICAgcmV0dXJuIGNvbnRpbnVhdGlvbjsKIH0KIAogQjNJUkdlbmVyYXRvcjo6Q29udHJv
bERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSkKIHsKLSAgICBCYXNp
Y0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogYnJhbmNo
VGFyZ2V0ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogYm9keSA9IGVtaXRUaWVyVXBD
aGVjayhicmFuY2hUYXJnZXQsIFRpZXJVcENvdW50Ojpsb29wRGVjcmVtZW50KCksIG9yaWdpbigp
KTsKKwogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBK
dW1wLCBvcmlnaW4oKSwgYm9keSk7Ci0gICAgYm9keS0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50
QmxvY2spOworCiAgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIHJldHVybiBDb250cm9s
RGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGlu
dWF0aW9uLCBib2R5KTsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwg
c2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYnJhbmNoVGFyZ2V0KTsK
K30KKworQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkVG9wTGV2
ZWwoVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3Jp
Z2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9wcm9jLmFkZEJsb2NrKCkp
OworfQorCitCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRCbG9j
ayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBvcmln
aW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3Byb2MuYWRkQmxvY2soKSk7CiB9
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBU
eXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdApAQCAt
OTc0LDkgKzEwMjEsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUo
KSk7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGwpLCBmdW5jdGlvbkluZGV4
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4
IH0pOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0pOwpAQCAtMTAyNiw5ICsxMDczLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAog
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGwpLCBmdW5jdGlvbkluZGV4IH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVu
ZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4IH0p
OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIH0pOwpAQCAtMTA5NCw3ICsxMTQxLDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAg
ICAgICAgIH0pOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkpKTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+
KE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBjb2RlKSkpKTsKKwogCiAgICAgVHlw
ZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKICAgICByZXN1bHQgPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3Jp
Z2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLApAQCAtMTE1OCw3ICsxMjA4LDcgQEAg
dm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9nTG4oKTsKIH0KIAotc3RhdGljIHZv
aWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2Rl
KQorc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogewogICAgIENDYWxsSGVscGVy
cyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CiAKQEAgLTEzMTMs
NyArMTM2MywxMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRp
b25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbgogICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6
b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgIH0KIAotICAgIGNvbXBpbGF0aW9u
Q29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCA9IGppdC5jYWxsKCk7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJD
YWxsKCk7CisgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCAr
IGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3Bh
Y2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNr
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+
YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSB9KTsKKyAgICB9KTsKKwogCiAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0
JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKICAgICAgICAgR1BSUmVnIHJlZyA9
IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwpAQCAtMTMzOSwxMCArMTM5NSwxMiBAQCBzdGF0aWMg
dm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlv
bkNvbnRleHQsIFdhc21JbgogCiBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdp
bgogewotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihPcGNvZGVPcmlnaW4obV9wYXJz
ZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNl
dCgpKSk7CisgICAgT3Bjb2RlT3JpZ2luIG9yaWdpbihtX3BhcnNlci0+Y3VycmVudE9wY29kZSgp
LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworICAgIEFTU0VSVChp
c1ZhbGlkT3BUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG9yaWdpbi5vcGNvZGUoKSkpKTsKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKIH0KIAotRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3Qq
IGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUs
IHVuc2lnbmVkIG9wdExldmVsKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCiB7
CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9u
PigpOwogCkBAIC0xMzYyLDkgKzE0MjAsMTEgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdh
c21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXQKICAg
ICAvLyBvcHRMZXZlbD0xLgogICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFs
c2UpOwogICAgIAotICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChvcHRMZXZlbCk7CisgICAgcHJv
Y2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVs
KCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkp
OwogCi0gICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0Lmdl
dCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CisgICAgQjNJUkdlbmVyYXRvciBj
b250ZXh0KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOwogICAg
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApAQCAtMTM4NSw3ICsxNDQ1LDggQEAgRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoQ29tcGlsYXQKICAgICAgICAgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOwogICAgIH0KIAotICAgIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihjb21waWxhdGlvbkNvbnRl
eHQsICpyZXN1bHQsIHNpZ25hdHVyZSwgaW5mbywgbW9kZSk7CisgICAgaWYgKGNvbXBpbGF0aW9u
TW9kZSA9PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUpCisgICAgICAgIGNyZWF0ZUpTVG9XYXNt
V3JhcHBlcihjb21waWxhdGlvbkNvbnRleHQsICpyZXN1bHQsIHNpZ25hdHVyZSwgaW5mbywgbW9k
ZSwgZnVuY3Rpb25JbmRleCwgJnVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsKICAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAppbmRleCAxZWMxMDFmZTMzMTk2YzU0YjFjMDNhOWUzNDI3OTk4ZDI1
ZjJkMmEyLi43NjIyZGJlY2RlYmQ3YzM2YmZhYzRjZDk4OTJjNjc3NjdjMDU2MWExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTI5LDkg
KzI5LDExIEBACiAKICNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRp
b24uaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUlu
Zm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAg
LTQwLDE1ICs0MiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjbGFz
cyBNZW1vcnlJbmZvcm1hdGlvbjsKIAorZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgeworICAg
IEJCUU1vZGUsCisgICAgT01HTW9kZSwKK307CisKIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQg
ewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGpzRW50cnlwb2ludEpJVDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IGpzRW50cnlwb2ludEJ5cHJv
ZHVjdHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVycz4gd2FzbUVudHJ5cG9pbnRK
SVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlw
b2ludEJ5cHJvZHVjdHM7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2Fz
bUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2Rl
LCB1bnNpZ25lZCBvcHRMZXZlbCk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUs
IENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0g
bnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDhlNTRhY2U1MGFiMzhm
MDIyMGZjOTU2ZDBmMWFlY2JjNzUyOTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJXYXNtQmluZGluZy5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVQ
YXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKKyNpbmNsdWRlICJXYXNtVmFs
aWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
Kworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitCQlFQbGFuOjpCQlFQbGFu
KFZNJiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29t
cGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZSh2bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkKKyAgICAsIG1fYXN5bmNX
b3JrKHdvcmspCit7Cit9CisKK0JCUVBsYW46OkJCUVBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhf
dD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAg
OiBCQlFQbGFuKHZtLCBtYWtlUmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3Vy
Y2UpKSksIHdvcmssIFdURk1vdmUodGFzaykpCit7CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpJbml0
aWFsOworfQorCitCQlFQbGFuOjpCQlFQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogQmFzZSh2bSwgc291cmNlLCBzb3VyY2VMZW5ndGgsIFdURk1vdmUodGFzaykp
CisgICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0aWFsKQorICAgICwgbV9hc3luY1dvcmsod29yaykK
K3sKK30KKworY29uc3QgY2hhciogQkJRUGxhbjo6c3RhdGVTdHJpbmcoU3RhdGUgc3RhdGUpCit7
CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6IHJldHVybiAi
SW5pdGlhbCI7CisgICAgY2FzZSBTdGF0ZTo6VmFsaWRhdGVkOiByZXR1cm4gIlZhbGlkYXRlZCI7
CisgICAgY2FzZSBTdGF0ZTo6UHJlcGFyZWQ6IHJldHVybiAiUHJlcGFyZWQiOworICAgIGNhc2Ug
U3RhdGU6OkNvbXBpbGVkOiByZXR1cm4gIkNvbXBpbGVkIjsKKyAgICBjYXNlIFN0YXRlOjpDb21w
bGV0ZWQ6IHJldHVybiAiQ29tcGxldGVkIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBCQlFQbGFuOjptb3ZlVG9TdGF0ZShTdGF0ZSBzdGF0ZSkK
K3sKKyAgICBBU1NFUlQoc3RhdGUgPj0gbV9zdGF0ZSk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSAmJiBzdGF0ZSAhPSBtX3N0YXRlLCAibW92aW5nIHRvIHN0YXRlOiAiLCBzdGF0ZVN0cmluZyhz
dGF0ZSksICIgZnJvbSBzdGF0ZTogIiwgc3RhdGVTdHJpbmcobV9zdGF0ZSkpOworICAgIG1fc3Rh
dGUgPSBzdGF0ZTsKK30KKworYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkK
K3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwor
ICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOworICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6
OnJlcG9ydENvbXBpbGVUaW1lcygpKQorICAgICAgICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKKworICAgIHsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3Nv
dXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24pOworICAgICAgICBhdXRv
IHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBhcnNlKCk7CisgICAgICAgIGlmICghcGFyc2VS
ZXN1bHQpIHsKKyAgICAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92
ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKKyAgICBmb3IgKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMu
c2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
IlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1
bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLmVuZCk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0Owor
ICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAg
ICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICAgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRl
cm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKKworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1
bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvblN0YXJ0W2ldKSks
ICIsICIpOworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRp
b25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1i
ZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHZlcmJv
c2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCisgICAgICAgIGRhdGFMb2dMbigi
VG9vayAiLCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pY3Jvc2Vjb25kcygp
LCAiIHVzIHRvIHZhbGlkYXRlIG1vZHVsZSIpOworCisgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlZh
bGlkYXRlZCk7CisgICAgaWYgKG1fYXN5bmNXb3JrID09IFZhbGlkYXRpb24pCisgICAgICAgIGNv
bXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJC
UVBsYW46OnByZXBhcmUoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0
ZWQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwor
CisgICAgYXV0byB0cnlSZXNlcnZlQ2FwYWNpdHkgPSBbdGhpc10gKGF1dG8mIHZlY3Rvciwgc2l6
ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF2ZWN0
b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKSkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxs
b2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRO
dW1iZXIoc2l6ZSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh3aGF0KTsKKyAgICAgICAg
ICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworCisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CisgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNp
dHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5j
dGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IHRvIEphdmFTY3JpcHQg
c3R1YnMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJs
eSB0byBXZWJBc3NlbWJseSBjYWxscyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHko
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBXZWJB
c3NlbWJseSBmdW5jdGlvbnMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29t
cGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9u
IGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50
cywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIHRpZXItdXAgY291bnRzIikpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMucmVzaXplKGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKSk7CisgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1
bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6
ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOworICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShm
dW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRl
eCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7
ICsraW1wb3J0SW5kZXgpIHsKKyAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07CisgICAgICAgIGlmIChpbXBvcnQtPmtpbmQg
IT0gRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNp
emUoKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1
bmN0aW9uIG51bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBtYWtlU3RyaW5nKGlt
cG9ydC0+bW9kdWxlKSwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPmZpZWxkKSk7CisgICAgICAg
IG1fd2FzbVRvV2FzbUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQod2FzbVRvV2FzbShpbXBvcnRG
dW5jdGlvbkluZGV4KSk7CisgICAgfQorCisgICAgbW92ZVRvU3RhdGUoU3RhdGU6OlByZXBhcmVk
KTsKK30KKworLy8gV2UgZG9uJ3QgaGF2ZSBhIHNlbWFwaG9yZSBjbGFzcy4uLiBhbmQgdGhpcyBk
b2VzIGtpbmRhIGludGVyZXN0aW5nIHRoaW5ncy4KK2NsYXNzIEJCUVBsYW46OlRocmVhZENvdW50
SG9sZGVyIHsKK3B1YmxpYzoKKyAgICBUaHJlYWRDb3VudEhvbGRlcihCQlFQbGFuJiBwbGFuKQor
ICAgICAgICA6IG1fcGxhbihwbGFuKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9wbGFuLm1fbG9jayk7CisgICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhyZWFkcysr
OworICAgIH0KKworICAgIH5UaHJlYWRDb3VudEhvbGRlcigpCisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3BsYW4ubV9sb2NrKTsKKyAgICAgICAgbV9wbGFuLm1fbnVtYmVyT2ZB
Y3RpdmVUaHJlYWRzLS07CisKKyAgICAgICAgaWYgKCFtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMgJiYgIW1fcGxhbi5oYXNXb3JrKCkpCisgICAgICAgICAgICBtX3BsYW4uY29tcGxldGUo
bG9ja2VyKTsKKyAgICB9CisKKyAgICBCQlFQbGFuJiBtX3BsYW47Cit9OworCit2b2lkIEJCUVBs
YW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQoreworICAgIEFT
U0VSVChtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZCk7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIlN0YXJ0aW5nIGNvbXBpbGF0aW9uIik7CisKKyAgICBpZiAoIWhhc1dvcmsoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5Q29tcGls
ZVN0YXJ0LCBXZWJBc3NlbWJseUNvbXBpbGVFbmQpOworICAgIFRocmVhZENvdW50SG9sZGVyIGhv
bGRlcigqdGhpcyk7CisKKyAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7CisgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKGVmZm9ydCA9
PSBQYXJ0aWFsICYmIGJ5dGVzQ29tcGlsZWQgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlQYXJ0aWFs
Q29tcGlsZUxpbWl0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleDsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49IGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGlmIChoYXNXb3JrKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21waWxlZCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnVuY3Rpb25JbmRleCA9
IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1
bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBzaXplX3QgZnVu
Y3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5j
dGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0
aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNp
emUoKSArIGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CisgICAgICAg
IEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKKworICAgICAgICBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KCk7CisgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSAmbV90aWVyVXBDb3Vu
dHNbZnVuY3Rpb25JbmRleF07CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2Rl
LCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CisKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBpZiAoIW1fZXJy
b3JNZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQg
ZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KKyAg
ICAgICAgICAgICAgICBmYWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1
bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVu
Y3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXpl
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJl
c3VsdCk7CisgICAgICAgIGJ5dGVzQ29tcGlsZWQgKz0gZnVuY3Rpb25MZW5ndGg7CisgICAgfQor
fQorCit2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIp
Cit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudElu
ZGV4ID49IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXpl
KCkpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7CisK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKKyAgICAgICAgZm9yICh1aW50
MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewor
ICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNv
bnRleHRzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBp
bGF0aW9uPigKKyAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAo
IldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
KSwKKyAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6
OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rp
b25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRl
eHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CisgICAgICAgICAg
ICAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9k
dWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
IGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0
aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEg
UkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0NjIKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dh
c21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBl
eGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlIC0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgp
KS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5j
YWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGV4ZWN1dGFibGVBZGRyZXNzKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFpc0NvbXBsZXRlKCkp
IHsKKyAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBsZXRlZCk7CisgICAgICAgIHJ1bkNv
bXBsZXRpb25UYXNrcyhsb2NrZXIpOworICAgIH0KK30KKwordm9pZCBCQlFQbGFuOjp3b3JrKENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBj
YXNlIFN0YXRlOjpJbml0aWFsOgorICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7Cisg
ICAgICAgIGlmICghaGFzV29yaygpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICBjYXNlIFN0YXRlOjpWYWxpZGF0ZWQ6CisgICAgICAgIHByZXBhcmUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOgorICAgICAgICBjb21waWxlRnVuY3Rp
b25zKGVmZm9ydCk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM3MjZjN2JjMDM0ZGZhNWNiYTNiMDIxMjM1YzVh
YmRmNDY3NDg5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJW
TS5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtVGll
clVwQ291bnQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRh
c2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua0luZm87Citj
bGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEpTUHJvbWlzZURlZmVycmVkOworCituYW1lc3Bh
Y2UgV2FzbSB7CisKK2NsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CitwdWJsaWM6
CisgICAgdXNpbmcgQmFzZSA9IFBsYW47CisgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsg
RnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBz
aG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdp
bGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgQkJRUGxhbihWTSYsIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQkJRUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRp
b25UYXNrJiYpOworICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUg
dXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlk
YXRpb24vZnVuY3Rpb24gdGVzdHMKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBnZXQgcmlkIG9mIGZ1
bmN0aW9uIHRlc3RzIHdlIHNob3VsZCByZW1vdmUgQXN5bmNXb3JrIGZyb20gdGhpcyBjb25zdHJ1
Y3Rvci4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKFZNJiwgY29uc3QgdWludDhfdCos
IHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIGJvb2wgcGFyc2VB
bmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJl
KCk7CisgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhj
b25zdCBGdW5jdG9yJik7CisKKyAgICBWZWN0b3I8RXhwb3J0PiYgZXhwb3J0cygpIGNvbnN0Cisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Cisg
ICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzOworICAgIH0KKworICAg
IHNpemVfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvbkNvdW50KCk7CisgICAgfQorCisgICAg
UmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJbmZvcm1hdGlvbigpCisgICAgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAg
IHJldHVybiBXVEZNb3ZlKG1fbW9kdWxlSW5mb3JtYXRpb24pOworICAgIH0KKworICAgIEJhZzxD
YWxsTGlua0luZm8+JiYgdGFrZUNhbGxMaW5rSW5mb3MoKQorICAgIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4gV1RGTW92
ZShtX2NhbGxMaW5rSW5mb3MpOworICAgIH0KKworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+JiYgdGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKQorICAgIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4gV1RGTW92
ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOworICAgIH0KKworICAgIFZlY3RvcjxWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCkKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyk7CisgICAgfQorCisgICAg
VmVjdG9yPFRpZXJVcENvdW50PiB0YWtlVGllclVwQ291bnRzKCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV90aWVyVXBDb3VudHMpOworICAgIH0KKworICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1
aW50OF90IHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAgICAgVmFsaWRhdGVkLAorICAgICAgICBQ
cmVwYXJlZCwKKyAgICAgICAgQ29tcGlsZWQsCisgICAgICAgIENvbXBsZXRlZCAvLyBXZSBzaG91
bGQgb25seSBtb3ZlIHRvIENvbXBsZXRlZCBpZiB3ZSBhcmUgaG9sZGluZyB0aGUgbG9jay4KKyAg
ICB9OworCisgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChtX2FzeW5jV29yayA9PSBBc3luY1dvcms6OlZhbGlkYXRpb24pCisgICAgICAgICAgICBy
ZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpWYWxpZGF0ZWQ7CisgICAgICAgIHJldHVybiBtX3N0YXRl
IDwgU3RhdGU6OkNvbXBpbGVkOworICAgIH0KKyAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZv
cnQpIG92ZXJyaWRlOworICAgIGJvb2wgaGFzQmVlblByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KKyAgICBib29sIG11bHRpVGhyZWFkZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBoYXNCZWVuUHJlcGFyZWQoKTsgfQorCitwcml2YXRlOgor
ICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRDb3Vu
dEhvbGRlcjsKKyAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVu
ZCB0byBwYXJlbnQgY2xhc3Nlcy4uLgorICAgIHVzaW5nIEJhc2U6Om1fbG9jazsKKworICAgIHZv
aWQgbW92ZVRvU3RhdGUoU3RhdGUpOworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZDsgfQorICAgIHZvaWQgY29t
cGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZTsKKworICAgIGNvbnN0IGNoYXIq
IHN0YXRlU3RyaW5nKFN0YXRlKTsKKyAgICAKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxM
aW5rSW5mb3M7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNt
RXhpdFN0dWJzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rp
b24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250
ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CisgICAgVmVjdG9yPFRpZXJVcENvdW50PiBtX3Rp
ZXJVcENvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisgICAgU3RhdGUgbV9zdGF0ZTsKKworICAgIGNv
bnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKKyAgICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVU
aHJlYWRzIHsgMCB9OworICAgIHVpbnQzMl90IG1fY3VycmVudEluZGV4IHsgMCB9OworfTsKKwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZTA5N2IxMjA0NTZhN2U4YmU4ZDVlN2RlN2EzMjQ1ZGQzZGZmNTg3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQ2FsbGVlQml0cy5oIgorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCisjaW5j
bHVkZSAiV2FzbUNhbGxlZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIWZhaWxlZCgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVu
Y3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgpIHsKKyAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKKwor
ICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxs
ZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShqc0VudHJ5cG9pbnRDYWxsZWUucHRy
KCkpKTsKKworICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9
IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNh
bGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxl
ZS5wdHIoKSkpOworCisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RG
TW92ZShqc0VudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCmluZGV4IGU4NzBkZWYyYTE3MDRjMDIzZjY2NzVkOTgwNWIwOTAxZGUzOWU2YzIuLjU0MzUy
OTM4N2ZmNzkzOWE4MjBjMmU5MDQxNjc2N2EwNzE0NzE1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTQ1NSw3ICs0NTUsOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB9CiAKICAg
ICAvLyBUYWlsIGNhbGwgaW50byB0aGUgY2FsbGVlIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpv
ZmZzZXRPZldhc21FbnRyeXBvaW50KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbigpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwg
c2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsZWUuaAppbmRleCAwOTg3N2VkMDA0OTkzNDFlNmVlOGZkODFmZWIxNDBiOTg3NTNmNjM0
Li45ODM2MmYzMjlmYmYwN2Y1ZDEzNzdkOWM5MTA5N2E2ZmFkYmQ2NjUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC00Myw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpjYWxsZWUpOwogICAgIH0KIAotICAgIHZvaWQqIGVu
dHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCogZW50cnlwb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IH0K
IAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1
cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggOGJmM2FmNGVjODEzNDhiZDBh
NmJhMTNhMjQyZjZlNjA3MjZiOTYxNy4uNjY5Y2RjNzQxM2Q0NWM3NzE3ODg2NTgxMTdiMGMwZTE3
ODRlZjFkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5j
cHAKQEAgLTI5LDggKzI5LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1
ZGUgIldhc21CQlFQbGFuSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKLSNpbmNs
dWRlICJXYXNtUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQwLDcgKzQwLDcgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soVk0mIHZtLCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBt
b2R1bGVJbmZvcm1hdGkKICAgICAsIG1fbW9kZShtb2RlKQogewogICAgIFJlZlB0cjxDb2RlQmxv
Y2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwotICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxh
bih2bSwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIFBsYW46OkZ1bGxDb21waWxlLCBjcmVh
dGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0mLCBQbGFuJikgeworICAgIG1fcGxhbiA9IGFkb3B0
UmVmKCpuZXcgQkJRUGxhbih2bSwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46
OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0mLCBQbGFuJikgewog
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3Bs
YW4tPmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJy
b3JNZXNzYWdlKCk7CkBAIC00OCwxMyArNDgsMjEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0m
IHZtLCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fY2FsbGVlcy5yZXNp
emUobV9jYWxsZWVDb3VudCAqIDIpOworICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50
dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCisgICAgICAgIG1fY2FsbGVlcy5yZXNpemUobV9j
YWxsZWVDb3VudCk7CisgICAgICAgIG1fanNDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsK
KyAgICAgICAgbV9vcHRpbWl6ZWRDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAg
ICAgbV93YXNtRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291bnQpOworCiAgICAgICAgIG1f
cGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmPFdh
c206OkNhbGxlZT4mJiBqc0VudHJ5cG9pbnRDYWxsZWUsIFJlZjxXYXNtOjpDYWxsZWU+JiYgd2Fz
bUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0g
PSBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICBtX2NhbGxlZXNbY2Fs
bGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XSA9IFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUp
OworICAgICAgICAgICAgbV9qc0NhbGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92ZShqc0VudHJ5
cG9pbnRDYWxsZWUpOworICAgICAgICAgICAgbV9jYWxsZWVzW2NhbGxlZUluZGV4XSA9IFdURk1v
dmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICAgICAgbV93YXNtRW50cnlQb2ludHNb
Y2FsbGVlSW5kZXhdID0gbV9jYWxsZWVzW2NhbGxlZUluZGV4XS0+ZW50cnlwb2ludCgpOwogICAg
ICAgICB9KTsKIAogICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMgPSBtX3BsYW4tPnRha2VX
YXNtVG9XYXNtRXhpdFN0dWJzKCk7CisgICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1f
cGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKKyAgICAgICAgbV90aWVyVXBDb3VudHMg
PSBtX3BsYW4tPnRha2VUaWVyVXBDb3VudHMoKTsKIAogICAgICAgICBtX3BsYW4gPSBudWxscHRy
OwogICAgIH0pKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgK
aW5kZXggZGI5YTg5MTdiYThlMWRhOGFjZDhmMThlMWRkMzA4NjE2NWUyMWRlNi4uNTQ0ZTZkNmI0
MDg4ZjE3MThiZDAyYmViZTY1YTc1ODZiMmVkMjc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
Ildhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CkBAIC00MSw4ICs0MiwxMSBA
QCBjbGFzcyBWTTsKIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlOwotY2xhc3MgUGxh
bjsKK2NsYXNzIEJCUVBsYW47CitjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uOworc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7Cit0eXBlZGVmIHZvaWQqKiBXYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbjsKIGVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Q7
CiAgICAgCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29k
ZUJsb2NrPiB7CkBAIC03NSwzMCArNzksNTIgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZnVu
Y3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVicy5z
aXplKCk7IH0KIAotICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgQ2FsbGVlJiBq
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
cmV0dXJuICptX2pzQ2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAgfQorICAgIENhbGxl
ZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9u
SW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBj
YWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsK
KyAgICAgICAgaWYgKG1fb3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0pCisgICAgICAgICAg
ICByZXR1cm4gKm1fb3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgICAg
IHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9Ci0gICAgV2FzbTo6
Q2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorCisgICAgV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0
aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25l
ZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQo
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsK
LSAgICAgICAgcmV0dXJuICptX2NhbGxlZXNbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5n
ZXQoKTsKKyAgICAgICAgcmV0dXJuICZtX3dhc21FbnRyeVBvaW50c1tjYWxsZWVJbmRleF07CiAg
ICAgfQorCisgICAgVGllclVwQ291bnQmIHRpZXJVcENvdW50KHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF07
CisgICAgfQorCiAgICAgYm9vbCBpc1NhZmVUb1J1bihNZW1vcnlNb2RlKTsKIAorICAgIE1lbW9y
eU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorCiAgICAgfkNvZGVCbG9jaygp
OwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKKwogICAgIENvZGVCbG9jayhW
TSYsIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJik7CiAgICAgdW5zaWduZWQgbV9jYWxs
ZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1fbW9kZTsKICAgICBWZWN0b3I8UmVmUHRyPENhbGxl
ZT4+IG1fY2FsbGVlczsKKyAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fb3B0aW1pemVkQ2Fs
bGVlczsKKyAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fanNDYWxsZWVzOworICAgIFZlY3Rv
cjx2b2lkKj4gbV93YXNtRW50cnlQb2ludHM7CisgICAgVmVjdG9yPFRpZXJVcENvdW50PiBtX3Rp
ZXJVcENvdW50czsKKyAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBt
X3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4g
bV93YXNtVG9XYXNtRXhpdFN0dWJzOwotICAgIFJlZlB0cjxQbGFuPiBtX3BsYW47CisgICAgUmVm
UHRyPEJCUVBsYW4+IG1fcGxhbjsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTG9j
ayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4
IDY3ZjcwNTY1YzAwMDBiMzUyNzVjOWY4NmQ0MzRhNjRiYjc1NzIxNTkuLmQ5ZWI3Yjg5MTllYTNj
YWZkMGI3MzE2YmM0Zjk3OTY2M2NiZWIwNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAotI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNs
dWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC00Niw2ICs0
NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNGdW5jdGlvbjsKIAorbmFtZXNwYWNl
IEIzIHsKK2NsYXNzIENvbXBpbGF0aW9uOworfQorCiBuYW1lc3BhY2UgV2FzbSB7CiAKIGlubGlu
ZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKQEAgLTIzMyw4ICsyMzYsOCBAQCBzdHJ1Y3Qg
Q3VzdG9tU2VjdGlvbiB7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbCB7Ci0g
ICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsTG9jYXRpb247Ci0gICAgc2l6ZV90IGZ1bmN0aW9uSW5k
ZXg7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0aW9uOworICAgIHNpemVfdCBm
dW5jdGlvbkluZGV4U3BhY2U7CiB9OwogCiBzdHJ1Y3QgRW50cnlwb2ludCB7CkBAIC0yNTUsMjAg
KzI1OCwyNCBAQCBzdHJ1Y3QgV2FzbUV4aXRTdHVicyB7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHdhc21Ub1dhc207CiB9OwogCit0eXBlZGVmIHZvaWQqKiBXYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbjsKKwogLy8gV2ViQXNzZW1ibHkgZGlyZWN0IGNhbGxzIGFuZCBjYWxsX2luZGlyZWN0
IHVzZSBpbmRpY2VzIGludG8gImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4gVGhpcyBzcGFjZSBzdGFy
dHMgd2l0aCBhbGwgaW1wb3J0cywgYW5kIHRoZW4gYWxsIGludGVybmFsIGZ1bmN0aW9ucy4KIC8v
IENhbGxhYmxlRnVuY3Rpb24gYW5kIEZ1bmN0aW9uSW5kZXhTcGFjZSBhcmUgb25seSBtZWFudCBh
cyBmYXN0IGxvb2t1cCB0YWJsZXMgZm9yIHRoZXNlIG9wY29kZXMsIGFuZCBkbyBub3Qgb3duIGNv
ZGUuCiBzdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbiB7CiAgICAgQ2FsbGFibGVGdW5jdGlvbigpID0g
ZGVmYXVsdDsKIAotICAgIENhbGxhYmxlRnVuY3Rpb24oU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgsIHZvaWQqIGNvZGUgPSBudWxscHRyKQorICAgIENhbGxhYmxlRnVuY3Rpb24oU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGNvZGUg
PSBudWxscHRyKQogICAgICAgICA6IHNpZ25hdHVyZUluZGV4KHNpZ25hdHVyZUluZGV4KQogICAg
ICAgICAsIGNvZGUoY29kZSkKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxhYmxlRnVuY3Rpb24sIGNvZGUpOyB9CisKICAgICAvLyBGSVhNRSBwYWNrIHRoZSBT
aWduYXR1cmVJbmRleCBhbmQgdGhlIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTEKICAgICBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IH07Ci0g
ICAgdm9pZCogY29kZSB7IG51bGxwdHIgfTsKKyAgICBXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
biBjb2RlIHsgbnVsbHB0ciB9OwogfTsKIHR5cGVkZWYgVmVjdG9yPENhbGxhYmxlRnVuY3Rpb24+
IEZ1bmN0aW9uSW5kZXhTcGFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFhYzg3YWNiNTc0N2M3ZmNhMmY5
MzZlYzljZjY3OGI0MzE3ODE3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKworaW5saW5lIE1hY2hpbmVUaHJlYWRzJiB3
YXNtVGhyZWFkcygpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNoaW5lVGhy
ZWFkcz4gdGhyZWFkczsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIHRocmVhZHMuY29uc3RydWN0KCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gdGhyZWFkczsKK30KKwordm9pZCBzdGFydFRyYWNraW5nQ3VycmVu
dFRocmVhZCgpCit7CisgICAgd2FzbVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7Cit9CisK
K3ZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHdhc21UaHJlYWRzKCkuZ2V0TG9jaygpKTsKKworICAgIGNvbnN0IERv
dWJseUxpbmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0g
d2FzbVRocmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8qIHRocmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4
dCgpKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChz
aWdpbmZvX3QqLCB1Y29udGV4dF90KikgeworICAgICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhh
dCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBhbHJlYWR5IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBj
YWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBzdXJlLgorICAgICAgICAgICAgV1RGOjpjcm9z
c01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKKyAgICAKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVh
ZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZiYzhkN2E2ODNiOTRiOTAxZTk0NDRlZTNkZmVjYzhkNGFlNTFiZTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVh
ZHMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNp
bmNsdWRlICJXYXNtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordm9pZCBzdGFydFRyYWNraW5nQ3Vy
cmVudFRocmVhZCgpOworCit2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygp
OworICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKaW5k
ZXggNWMxODc2MzJiY2JjOTAxMDA3MmE5MGFjYWQ0ODViYTU0ZTk5NmMyZS4uNDZlZTk0ZDY5YjBj
MjYxMmVlZWY4MThkYTgxNzcyYTkzM2JlMDEwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZS5jcHAKQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAorI2luY2x1ZGUgIldhc21CQlFQbGFuSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21N
b2R1bGVJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21QbGFuSW5saW5lcy5oIgogI2luY2x1
ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpA
QCAtNDYsNyArNDYsNyBAQCBXYXNtOjpTaWduYXR1cmVJbmRleCBNb2R1bGU6OnNpZ25hdHVyZUlu
ZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdAogICAgIHJldHVybiBtX21v
ZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKTsKIH0KIAotc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBt
YWtlVmFsaWRhdGlvblJlc3VsdChQbGFuJiBwbGFuKQorc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlv
blJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChCQlFQbGFuJiBwbGFuKQogewogICAgIEFTU0VS
VCghcGxhbi5oYXNXb3JrKCkpOwogICAgIGlmIChwbGFuLmZhaWxlZCgpKQpAQCAtNTgsMjAgKzU4
LDIwIEBAIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNr
KE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVNoYXJl
ZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KFZNJiB2bSwgUGxhbiYgcGxhbikgewogICAgICAgICBBU1NFUlQoIXBsYW4uaGFzV29yaygpKTsK
LSAgICAgICAgY2FsbGJhY2stPnJ1bih2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbikpOwor
ICAgICAgICBjYWxsYmFjay0+cnVuKHZtLCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2Fz
dDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAogTW9kdWxlOjpWYWxpZGF0aW9uUmVz
dWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
KQogewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBXVEZNb3Zl
KHNvdXJjZSksIFBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAg
UmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4odm0sIFdURk1vdmUoc291
cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICBw
bGFuLT5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CiAgICAgcmV0dXJuIG1ha2VWYWxpZGF0aW9u
UmVzdWx0KHBsYW4uZ2V0KCkpOwogfQogCiB2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhWTSYg
dm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxs
YmFjayYmIGNhbGxiYWNrKQogewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQ
bGFuKHZtLCBXVEZNb3ZlKHNvdXJjZSksIFBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9u
Q2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpKSk7CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9w
dFJlZigqbmV3IEJCUVBsYW4odm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlv
biwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAppbmRleCAyYzE2Y2QwMjM3ZTVkMjU0YzVkZjE2
YjEwODkxZjRjZmM4ZDE4MWJhLi5jZWMzMGU1Yjg2MTczM2I1ZmQyMjVmMWVhNTE1ODhkMzVjNDkx
NWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC02Miw2ICs2
Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENv
ZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfk1vZHVsZSgpOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoTWVtb3J5TW9k
ZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSld
LmdldCgpOyB9CiBwcml2YXRlOgogICAgIFJlZjxDb2RlQmxvY2s+IGdldE9yQ3JlYXRlQ29kZUJs
b2NrKFZNJiwgTWVtb3J5TW9kZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTUyNDg1NzBlNjJiMzM3NGQwOTBiMTc3MWQ3YjU0NzNm
NzQ4Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR1BsYW4uY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21P
TUdQbGFuLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBp
bGF0aW9uLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJX
YXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgorI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJXYXNt
V29ya2xpc3QuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitPTUdQbGFuOjpPTUdQ
bGFuKFZNJiB2bSwgUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IEJhc2Uodm0sIG1h
a2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9tb2R1bGUobW9kdWxlLmNvcHlSZWYo
KSkKKyAgICAsIG1fY29kZUJsb2NrKCptb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKKyAgICAs
IG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQoreworICAgIHNldE1vZGUobW9kZSk7Cisg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKKyAgICBBU1NFUlQobV9jb2RlQmxv
Y2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKKyAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIg
b2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOworfQorCit2b2lkIE9N
R1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCit7CisgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5ydW5uYWJsZSgpKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUt
PmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKKyAgICBjb25zdCBGdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnkmIGxvY2F0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W21fZnVuY3Rpb25JbmRleF07CisgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5kYXRhKCkgKyBsb2NhdGlvbi5zdGFydDsKKyAg
ICBjb25zdCBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBsb2NhdGlvbi5lbmQgLSBsb2NhdGlvbi5z
dGFydDsKKyAgICBBU1NFUlQoZnVuY3Rpb25TdGFydCArIGZ1bmN0aW9uTGVuZ3RoIDw9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNvdXJjZS5lbmQoKSk7CisKKyAgICBjb25zdCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNp
emUoKSk7CisKKyAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRl
eF07CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpKSk7CisKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gdW5saW5rZWRD
YWxsczsKKyAgICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBhdXRvIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbklu
ZGV4KTsKKworICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgeworICAg
ICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVz
dWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1f
ZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVudHJ5cG9p
bnQgb21nRW50cnlwb2ludDsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2Fz
bUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIiwgbV9mdW5j
dGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCisgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50
cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lz
dGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPndhc21FbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworCisgICAgdm9pZCogZW50cnlwb2ludDsKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2Nr
Rm9yKG1vZGUoKSkpOworICAgICAgICBSZWY8Q2FsbGVlPiBjYWxsZWUgPSBDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT53YXNtQ2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBBU1NF
UlQoIW1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7Cisg
ICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKKworICAgICAgICAvLyBX
ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBwdWJsaXNoIG91ciBjYWxsZWUgYXQgdGhlIHNhbWUgdGlt
ZSBhcyB3ZSBsaW5rIG91ciBjYWxsc2l0ZXMuIFRoaXMgZW5hYmxlcyB1cyB0byBlbnN1cmUgd2UK
KyAgICAgICAgLy8gYWx3YXlzIGNhbGwgdGhlIGZhc3Rlc3QgY29kZS4gQW55IGZ1bmN0aW9uIGxp
bmtlZCBhZnRlciB1cyB3aWxsIHNlZSBvdXIgbmV3IGNvZGUgYW5kIHRoZSBuZXcgY2FsbHNpdGVz
LCB3aGljaCB0aGV5CisgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhl
eSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNo
ZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCisgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2Rl
IGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCisgICAgICAgIExvY2tIb2xkZXIgaG9sZGVy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRD
YWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKGNhbGxlZSk7CisKKyAgICAgICAgZm9y
IChhdXRvJiBjYWxsIDogdW5saW5rZWRDYWxscykgeworICAgICAgICAgICAgdm9pZCogZW50cnlw
b2ludDsKKyAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAgICAgICAg
ICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNt
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2UpLmVudHJ5cG9pbnQoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZW50cnlwb2lu
dCkpOworICAgICAgICB9CisgICAgICAgIHVubGlua2VkQ2FsbHMgPSBzdGQ6OmV4Y2hhbmdlKG1f
Y29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbbV9mdW5jdGlvbkluZGV4XSwgdW5saW5r
ZWRDYWxscyk7CisgICAgfQorCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdl
IGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQg
dmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAvLyB3aGVyZSB3ZSBh
cmUgdGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJlcGF0Y2ggc29tZSBm
dW5jdGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBBLiBBbm90aGVyIENQVSBjb3VsZCBzZWUK
KyAgICAvLyB0aGUgdXBkYXRlcyB0byBCIGJ1dCBzdGlsbCBub3QgaGF2ZSByZXNldCBpdCdzIGNh
Y2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgorICAg
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2Qg
dG8gYmUgcGFyYW5vaWQuCisKKyAgICBtX2NvZGVCbG9jay0+bV93YXNtRW50cnlQb2ludHNbbV9m
dW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGhv
bGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKworICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9
IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiAgY2FsbHNpdGVzKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0
OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0
IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgICAgIGlm
IChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDog
IiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwg
UmF3UG9pbnRlcihlbnRyeXBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1f
d2FzbVRvV2FzbUNhbGxzaXRlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgIT0g
ZnVuY3Rpb25JbmRleFNwYWNlKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVC
bG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB3ZSByZXBhdGNoIGFueSByZWN1cnNpdmUgY2FsbHMuCisgICAgICAgIHJlcGF0
Y2hDYWxscyh1bmxpbmtlZENhbGxzKTsKKyAgICB9CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiRmluaXNoZWQgd2l0aCB0aWVyIHVwIGNvdW50IGF0OiAiLCBtX2NvZGVCbG9jay0+dGllclVw
Q291bnQobV9mdW5jdGlvbkluZGV4KS5jb3VudCgpKTsKKyAgICBjb21wbGV0ZShob2xkTG9jayht
X2xvY2spKTsKK30KKwordm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCogY29udGV4dCwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBWTSYgdm0gPSAqY29udGV4dC0+dm0oKTsK
KworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQtPmNvZGVC
bG9jaygpOworICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0gY29kZUJsb2NrLT5t
X2NvZGVCbG9jay0+bW9kZSgpKTsKKworICAgIC8vIFdlIHVzZSB0aGUgbGVhc3Qgc2lnbmlmaWNh
bnQgYml0IG9mIHRoZSB0aWVyVXBDb3VudCB0byByZXByZXNlbnQgd2hldGhlciBvciBub3Qgc29t
ZW9uZSBoYXMgYWxyZWFkeSBzdGFydGVkIHRoZSB0aWVyIHVwLgorICAgIGlmIChjb2RlQmxvY2st
Pm1fY29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFydFRpZXJV
cCgpKSB7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKHZt
LCBjb250ZXh0LT5tb2R1bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay0+
bV9jb2RlQmxvY2stPm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgZW5z
dXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQorICAgICAgICAgICAgcGxhbi0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTZmN2I4ZTNiZmYyNWY2MmMwNmYwMWFiMGQ0
YWMyMjgyYzE2ODMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QbGFuLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDYWxsTGlua0luZm87CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3Mg
T01HUGxhbiBmaW5hbCA6IHB1YmxpYyBQbGFuIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0g
UGxhbjsKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZl
cmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3lj
bGUuCisgICAgT01HUGxhbihWTSYsIFJlZjxNb2R1bGU+LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIGJvb2wgaGFzV29yaygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQorICAgIHZvaWQgd29yayhDb21w
aWxhdGlvbkVmZm9ydCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICAvLyBGb3Igc29tZSBy
ZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0byBwYXJlbnQgY2xhc3Nlcy4uLgorICAg
IHVzaW5nIEJhc2U6Om1fbG9jazsKKworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fY29tcGxldGVkOyB9CisgICAgdm9pZCBjb21wbGV0ZShjb25zdCBBYnN0
cmFjdExvY2tlciYgbG9ja2VyKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9jb21wbGV0ZWQg
PSB0cnVlOworICAgICAgICBydW5Db21wbGV0aW9uVGFza3MobG9ja2VyKTsKKyAgICB9CisgICAg
CisgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7CisgICAgUmVmPENvZGVCbG9jaz4gbV9jb2RlQmxv
Y2s7CisgICAgYm9vbCBtX2NvbXBsZXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV9mdW5j
dGlvbkluZGV4OworfTsKKwordm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCmluZGV4IDdiNzFjZDY4NGVkNTdiMTFmZWQ2ZTgyNjVkZWJhZDNkZGQyZTU3OTEuLmE4
YzQ5ZDk0MjM5ZTdhNzY4NzBhMDM1YzkzZWE0OWRiZDg5ZGUzZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTUwLDI5MSArNTAsNDUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogCi1QbGFuOjpQbGFuKFZNJiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3lu
Y1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihWTSYgdm0sIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDog
bV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQogICAgICwgbV9zb3VyY2UobV9tb2R1
bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCi0gICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxp
ZGF0ZWQpCi0gICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogICAgIG1fY29tcGxldGlvblRhc2tz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxhbjo6
UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IFBsYW4odm0sIG1ha2VSZWYoKm5ldyBNb2R1bGVJ
bmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywgV1RGTW92ZSh0YXNrKSkKLXsKLSAg
ICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7Ci19Ci0KLVBsYW46OlBsYW4oVk0mIHZtLCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCitQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCog
c291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAg
OiBtX21vZHVsZUluZm9ybWF0aW9uKG1ha2VSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0
b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VM
ZW5ndGgoc291cmNlTGVuZ3RoKQotICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKLSAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKCZ2bSwgV1RGTW92ZSh0YXNrKSkpOwogfQogCi1jb25zdCBjaGFyKiBQbGFuOjpz
dGF0ZVN0cmluZyhTdGF0ZSBzdGF0ZSkKK3ZvaWQgUGxhbjo6cnVuQ29tcGxldGlvblRhc2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBT
dGF0ZTo6SW5pdGlhbDogcmV0dXJuICJJbml0aWFsIjsKLSAgICBjYXNlIFN0YXRlOjpWYWxpZGF0
ZWQ6IHJldHVybiAiVmFsaWRhdGVkIjsKLSAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDogcmV0dXJu
ICJQcmVwYXJlZCI7Ci0gICAgY2FzZSBTdGF0ZTo6Q29tcGlsZWQ6IHJldHVybiAiQ29tcGlsZWQi
OwotICAgIGNhc2UgU3RhdGU6OkNvbXBsZXRlZDogcmV0dXJuICJDb21wbGV0ZWQiOwotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQorICAgIEFTU0VSVChpc0NvbXBs
ZXRlKCkgJiYgIWhhc1dvcmsoKSk7CiAKLXZvaWQgUGxhbjo6bW92ZVRvU3RhdGUoU3RhdGUgc3Rh
dGUpCi17Ci0gICAgQVNTRVJUKHN0YXRlID49IG1fc3RhdGUpOwotICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UgJiYgc3RhdGUgIT0gbV9zdGF0ZSwgIm1vdmluZyB0byBzdGF0ZTogIiwgc3RhdGVTdHJp
bmcoc3RhdGUpLCAiIGZyb20gc3RhdGU6ICIsIHN0YXRlU3RyaW5nKG1fc3RhdGUpKTsKLSAgICBt
X3N0YXRlID0gc3RhdGU7Ci19Ci0KLXZvaWQgUGxhbjo6ZmFpbChjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyLCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgImZhaWxpbmcgd2l0aCBtZXNzYWdlOiAiLCBlcnJvck1lc3NhZ2UpOwotICAgIG1fZXJy
b3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOwotICAgIGNvbXBsZXRlKGxvY2tlcik7
CisgICAgZm9yIChhdXRvJiB0YXNrIDogbV9jb21wbGV0aW9uVGFza3MpCisgICAgICAgIHRhc2su
c2Vjb25kLT5ydW4oKnRhc2suZmlyc3QsICp0aGlzKTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5j
bGVhcigpOworICAgIG1fY29tcGxldGVkLm5vdGlmeUFsbCgpOwogfQogCiB2b2lkIFBsYW46OmFk
ZENvbXBsZXRpb25UYXNrKFZNJiB2bSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBs
ZXRlZCkKKyAgICBpZiAoIWlzQ29tcGxldGUoKSkKICAgICAgICAgbV9jb21wbGV0aW9uVGFza3Mu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZ2bSwgV1RGTW92ZSh0YXNrKSkpOwogICAgIGVsc2UKICAg
ICAgICAgdGFzay0+cnVuKHZtLCAqdGhpcyk7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkluaXRpYWwpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIHZh
bGlkYXRpb24iKTsKLSAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZTsKLSAgICBpZiAodmVyYm9z
ZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKLSAgICAgICAgc3RhcnRUaW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci0KLSAgICB7Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1
bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsK
LSAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IG1vZHVsZVBhcnNlci5wYXJzZSgpOwotICAgICAg
ICBpZiAoIXBhcnNlUmVzdWx0KSB7Ci0gICAgICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayks
IFdURk1vdmUocGFyc2VSZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMg
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbkxvY2F0
aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBmdW5jdGlvbkxv
Y2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQpOwotICAgICAgICBjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5z
dGFydDsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb25Mb2NhdGlvbnNb
ZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3Rh
cnQ7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBtX3NvdXJjZUxlbmd0aCk7Ci0g
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7Ci0KLSAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFs
aWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0
KSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFy
dFtpXSkpLCAiLCAiKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyh2YWxpZGF0
aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVt
YmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh2ZXJi
b3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQotICAgICAgICBkYXRhTG9nTG4o
IlRvb2sgIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNyb3NlY29uZHMo
KSwgIiB1cyB0byB2YWxpZGF0ZSBtb2R1bGUiKTsKLSAgICBpZiAobV9hc3luY1dvcmsgPT0gVmFs
aWRhdGlvbikKLSAgICAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBQbGFuOjpwcmVwYXJlKCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0
ZTo6VmFsaWRhdGVkKTsKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgcHJlcGFy
YXRpb24iKTsKLQotICAgIFRyYWNlU2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUNvbXBpbGVT
dGFydCwgV2ViQXNzZW1ibHlDb21waWxlRW5kKTsKLQotICAgIGF1dG8gdHJ5UmVzZXJ2ZUNhcGFj
aXR5ID0gW3RoaXNdIChhdXRvJiB2ZWN0b3IsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiB3aGF0
KSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShzaXpl
KSkpIHsKLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFsbG9jYXRpbmcgZW5vdWdoIHNwYWNlIGZvciAi
KTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHNpemUpOwotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQod2hhdCk7Ci0gICAgICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayks
IGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLQotICAgIGNvbnN0IGF1dG8mIGZ1bmN0
aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5OwotICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkxvY2F0aW9u
cy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQot
ICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBm
dW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXgg
PSAwOyBpbXBvcnRJbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHMuc2l6ZSgpOyAr
K2ltcG9ydEluZGV4KSB7Ci0gICAgICAgIEltcG9ydCogaW1wb3J0ID0gJm1fbW9kdWxlSW5mb3Jt
YXRpb24tPmltcG9ydHNbaW1wb3J0SW5kZXhdOwotICAgICAgICBpZiAoaW1wb3J0LT5raW5kICE9
IEV4dGVybmFsS2luZDo6RnVuY3Rpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
dW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXpl
KCk7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBmdW5j
dGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgbWFrZVN0cmluZyhpbXBv
cnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5maWVsZCkpOwotICAgICAgICBt
X3dhc21Ub1dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKHdhc21Ub1dhc20oaW1wb3J0RnVu
Y3Rpb25JbmRleCkpOwotICAgIH0KLQotICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpQcmVwYXJlZCk7
Ci19Ci0KLS8vIFdlIGRvbid0IGhhdmUgYSBzZW1hcGhvcmUgY2xhc3MuLi4gYW5kIHRoaXMgZG9l
cyBraW5kYSBpbnRlcmVzdGluZyB0aGluZ3MuCi1jbGFzcyBQbGFuOjpUaHJlYWRDb3VudEhvbGRl
ciB7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkQ291bnRIb2xkZXIoUGxhbiYgcGxhbikKLSAgICAgICAg
OiBtX3BsYW4ocGxhbikKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGxhbi5t
X2xvY2spOwotICAgICAgICBtX3BsYW4ubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKLSAgICB9
Ci0KLSAgICB+VGhyZWFkQ291bnRIb2xkZXIoKQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wbGFuLm1fbG9jayk7Ci0gICAgICAgIG1fcGxhbi5tX251bWJlck9mQWN0aXZlVGhy
ZWFkcy0tOwotCi0gICAgICAgIGlmICghbV9wbGFuLm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzICYm
ICFtX3BsYW4uaGFzV29yaygpKQotICAgICAgICAgICAgbV9wbGFuLmNvbXBsZXRlKGxvY2tlcik7
Ci0gICAgfQotCi0gICAgUGxhbiYgbV9wbGFuOwotfTsKLQotdm9pZCBQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSA+
PSBTdGF0ZTo6UHJlcGFyZWQpOwotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBj
b21waWxhdGlvbiIpOwotCi0gICAgaWYgKCFoYXNXb3JrKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRlcigqdGhpcyk7Ci0KLSAgICBzaXplX3QgYnl0ZXND
b21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgaWYgKGVmZm9ydCA9PSBQYXJ0aWFsICYmIGJ5dGVzQ29tcGlsZWQgPj0gT3B0
aW9uczo6d2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0KCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgaWYgKG1f
Y3VycmVudEluZGV4ID49IGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChoYXNXb3JrKCkpCi0gICAgICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRl
OjpDb21waWxlZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZnVuY3Rpb25JbmRleCA9IG1fY3VycmVudEluZGV4OwotICAgICAgICAgICAgKytt
X2N1cnJlbnRJbmRleDsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0
YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tm
dW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFy
dDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKLSAg
ICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAg
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0g
bV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBz
aWduYXR1cmVJbmRleCk7Ci0gICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9u
U3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCkpKTsKLQotICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhd
ID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgICAgIGF1dG8gcGFyc2VB
bmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSwgbV9tb2RlLCBPcHRpb25zOjp3ZWJBc3NlbWJseUIzT3B0aW1pemF0aW9uTGV2
ZWwoKSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7
Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAg
ICBpZiAoIW1fZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29t
cGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRo
ZSBmaXJzdC4KLSAgICAgICAgICAgICAgICBmYWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFu
ZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5n
OjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVk
LgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxv
Y2F0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNl
QW5kQ29tcGlsZVJlc3VsdCk7Ci0gICAgICAgIGJ5dGVzQ29tcGlsZWQgKz0gZnVuY3Rpb25MZW5n
dGg7Ci0gICAgfQotfQotCi12b2lkIFBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50
SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNp
emUoKSk7Ci0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsK
LQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkgewotICAgICAgICBmb3IgKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250
ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICAgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNv
bnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVu
Y3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0
cik7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlw
b2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlv
biA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJs
eSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3Rz
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscykgewot
ICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsKLSAgICAgICAgICAgICAg
ICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzczsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxs
LmZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMg
Y291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0
Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9B
U1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAg
ICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1
YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJl
c3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXggLSBtX3dh
c21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpKS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0
YWJsZUFkZHJlc3MpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtX3N0YXRlICE9IFN0YXRlOjpDb21wbGV0ZWQpIHsKLSAgICAgICAgbW92ZVRvU3RhdGUoU3Rh
dGU6OkNvbXBsZXRlZCk7Ci0gICAgICAgIGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxldGlvblRh
c2tzKQotICAgICAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGFzay5maXJzdCwgKnRoaXMpOwot
ICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5jbGVhcigpOwotICAgICAgICBtX2NvbXBsZXRlZC5u
b3RpZnlBbGwoKTsKLSAgICB9Ci19Ci0KIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQog
ewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgaWYgKG1fc3RhdGUgIT0gU3Rh
dGU6OkNvbXBsZXRlZCkgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YWl0
IGNvbmRpdGlvbmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHRvIGNvbXBs
ZXRlIC8gZmFpbC4KKyAgICBpZiAoIWlzQ29tcGxldGUoKSkgewogICAgICAgICBtX2NvbXBsZXRl
ZC53YWl0KG1fbG9jayk7CiAgICAgfQogfQpAQCAtMzUzLDEzICsxMDcsMTMgQEAgYm9vbCBQbGFu
Ojp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYgdm0pCiAgICAgaWYgKCFyZW1vdmVkQW55
VGFza3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpDb21wbGV0ZWQpIHsKKyAgICBpZiAoaXNDb21wbGV0ZSgpKSB7CiAgICAgICAgIC8vIFdlIHRy
aXZpYWxseSBjYW5jZWwgYW55dGhpbmcgdGhhdCdzIGNvbXBsZXRlZC4KICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgaWYgKG1fY29tcGxldGlvblRhc2tzLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgaWYgKG1fY29tcGxldGlvblRhc2tzLnNpemUoKSA9
PSAxKSB7CisgICAgICAgIEFTU0VSVCghbV9jb21wbGV0aW9uVGFza3NbMF0uZmlyc3QpOwogICAg
ICAgICBmYWlsKGxvY2tlciwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBQbGFuIHdhcyBjYW5j
ZWxsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNzYWdlIHBsZWFzZSBmaWxlIGEgYnVnIGF0
IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM2
Nyw2ICsxMjEsMTMgQEAgYm9vbCBQbGFuOjp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYg
dm0pCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFBsYW46OmZhaWwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKQoreworICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJmYWlsaW5nIHdpdGggbWVzc2FnZTogIiwgZXJyb3JNZXNzYWdlKTsKKyAg
ICBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUoZXJyb3JNZXNzYWdlKTsKKyAgICBjb21wbGV0ZShs
b2NrZXIpOworfQorCiBQbGFuOjp+UGxhbigpIHsgfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggYjZiZWYwNmQ5ZTM5
ZjZmN2I5MDU3ZDcxMThlZThjNGViYjZlNGUyMS4uZDQ1ZWQxZmQ2ODIyZTQxM2FlYmU2OTE1MTFi
ZmI3ZjFhODAxMzRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC00
OSwxMDkgKzQ5LDQ4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZN
JiwgUGxhbiYpOwogICAgIHVzaW5nIENvbXBsZXRpb25UYXNrID0gUmVmUHRyPFNoYXJlZFRhc2s8
Q2FsbGJhY2tUeXBlPj47CiAgICAgc3RhdGljIENvbXBsZXRpb25UYXNrIGRvbnRGaW5hbGl6ZSgp
IHsgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPihbXShWTSYsIFBsYW4mKSB7
IH0pOyB9Ci0gICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlk
YXRpb24gfTsKLSAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSBy
ZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2Ug
Y3ljbGUuCi0gICAgUGxhbihWTSYsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rv
cjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIFBsYW4oVk0m
LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKKwogICAgIC8vIE5v
dGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBh
Y3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMK
LSAgICAvLyBGSVhNRTogV2hlbiB3ZSBnZXQgcmlkIG9mIGZ1bmN0aW9uIHRlc3RzIHdlIHNob3Vs
ZCByZW1vdmUgQXN5bmNXb3JrIGZyb20gdGhpcyBjb25zdHJ1Y3Rvci4KLSAgICBKU19FWFBPUlRf
UFJJVkFURSBQbGFuKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21w
bGV0aW9uVGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBDb21wbGV0aW9u
VGFzayYmKTsKKyAgICB2aXJ0dWFsIEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CiAKICAgICAv
LyBJZiB5b3UgZ3VhcmFudGVlIHRoZSBvcmRlcmluZyBoZXJlLCB5b3UgY2FuIHJlbHkgb24gRklG
TyBvZiB0aGUKICAgICAvLyBjb21wbGV0aW9uIHRhc2tzIGJlaW5nIGNhbGxlZC4KICAgICB2b2lk
IGFkZENvbXBsZXRpb25UYXNrKFZNJiwgQ29tcGxldGlvblRhc2smJik7CiAKLSAgICBib29sIHBh
cnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJl
cGFyZSgpOwotICAgIGVudW0gQ29tcGlsYXRpb25FZmZvcnQgeyBBbGwsIFBhcnRpYWwgfTsKLSAg
ICB2b2lkIGNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgPSBBbGwpOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IEZ1bmN0b3ImKTsKLQotICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBvcnRzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAg
ICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7Ci0gICAgfQotCi0gICAg
c2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICB9Ci0KLSAgICBS
ZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAg
cmV0dXJuIFdURk1vdmUobV9tb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgfQotCi0gICAgQmFnPENh
bGxMaW5rSW5mbz4mJiB0YWtlQ2FsbExpbmtJbmZvcygpCi0gICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBXVEZNb3Zl
KG1fY2FsbExpbmtJbmZvcyk7Ci0gICAgfQotCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZj4mJiB0YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpCi0gICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBXVEZNb3Zl
KG1fd2FzbVRvV2FzbUV4aXRTdHVicyk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRNb2RlKE1lbW9y
eU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKLSAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7
Ci0gICAgICAgIEluaXRpYWwsCi0gICAgICAgIFZhbGlkYXRlZCwKLSAgICAgICAgUHJlcGFyZWQs
Ci0gICAgICAgIENvbXBpbGVkLAotICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkg
bW92ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCi0gICAgfTsKLQog
ICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1l
c3NhZ2U7IH0KIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsg
cmV0dXJuICFlcnJvck1lc3NhZ2UoKS5pc051bGwoKTsgfQotICAgIGJvb2wgaGFzV29yaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7IH0KLSAgICBib29sIGhhc0Jl
ZW5QcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9
CisgICAgdmlydHVhbCBib29sIGhhc1dvcmsoKSBjb25zdCA9IDA7CisgICAgZW51bSBDb21waWxh
dGlvbkVmZm9ydCB7IEFsbCwgUGFydGlhbCB9OworICAgIHZpcnR1YWwgdm9pZCB3b3JrKENvbXBp
bGF0aW9uRWZmb3J0ID0gQWxsKSA9IDA7CisgICAgdmlydHVhbCBib29sIG11bHRpVGhyZWFkZWQo
KSBjb25zdCA9IDA7CiAKICAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIGl0IGNhbmNlbGxlZCB0aGUgcGxhbi4KICAgICBib29sIHRyeVJlbW92ZVZN
QW5kQ2FuY2VsSWZMYXN0KFZNJik7CiAKLXByaXZhdGU6Ci0gICAgY2xhc3MgVGhyZWFkQ291bnRI
b2xkZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOwotCi0gICAgdm9pZCBj
b21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpOwotCi0gICAgdm9pZCBtb3ZlVG9TdGF0ZShT
dGF0ZSk7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImKTsKICAgICB2b2lkIGZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdHJp
bmcmJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUp
OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpID0gMDsKIAogICAgIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKLSAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVy
bmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKLSAgICBWZWN0b3I8Q29tcGls
YXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAKICAgICBWZWN0b3I8c3RkOjpw
YWlyPFZNKiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBsZXRpb25UYXNrczsKIAotICAgIFZl
Y3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHM7CiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29uc3Qgc2l6ZV90IG1f
c291cmNlTGVuZ3RoOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2Rl
IG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7
CiAgICAgQ29uZGl0aW9uIG1fY29tcGxldGVkOwotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgY29u
c3QgQXN5bmNXb3JrIG1fYXN5bmNXb3JrOwotICAgIHVpbnQ4X3QgbV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMgeyAwIH07Ci0gICAgdWludDMyX3QgbV9jdXJyZW50SW5kZXggeyAwIH07CiB9OwogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDlhZTJiOTY2MDA5M2E5YmViNzBkMWJkMWQ4YzQ1MTM0
NjU4MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRl
ICJDYWxsZWVCaXRzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgotI2luY2x1ZGUgIldhc21Q
bGFuLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0
b3ImIGNhbGxiYWNrKQotewotICAgIEFTU0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWdu
ZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewot
ICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwotCi0gICAgICAgIFJlZjxXYXNt
OjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1v
dmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwotCi0gICAgICAg
IFJlZjxXYXNtOjpDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7Ci0KLSAg
ICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2lu
dENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKLSAgICB9Ci19Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNhZDM1MDk4MDE5ZTM4MTA3N2UxNDY0OGNkNmZmNjAzMWFhYmExN2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaApAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJP
cHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKyAgICAvLyBU
aGlzIGNsYXNzIG1hbmFnZXMgdGhlIHRpZXIgdXAgY291bnRzIGZvciBXYXNtIGJpbmFyaWVzLiBU
aGUgbWFpbiBpbnRlcmVzdGluZyB0aGluZyBhYm91dAorICAgIC8vIHdhc20gdGllcmluZyB1cCBj
b3VudHMgaXMgdGhhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluZGljYXRlcyBpZiB0aGUg
dGllciB1cCBoYXMgYWxyZWFkeQorICAgIC8vIHN0YXJ0ZWQuIEFsc28sIHdhc20gY29kZSBkb2Vz
IG5vdCBhdG9taWNhbGx5IHVwZGF0ZSB0aGlzIGNvdW50LiBUaGlzIGlzIGJlY2F1c2Ugd2UKKyAg
ICAvLyBkb24ndCBjYXJlIHRvbyBtdWNoIGlmIHRoZSBjb3VudGRvd24gaXMgc2xpZ2h0bHkgb2Zm
LiBUaGUgdGllciB1cCB0cmlnZ2VyIGlzIGF0b21pYywgaG93ZXZlciwKKyAgICAvLyBzbyB0aWVy
IHVwIHdpbGwgYmUgdHJpZ2dlcmVkIGV4YWN0bHkgb25jZS4KKyAgICBjbGFzcyBUaWVyVXBDb3Vu
dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpZXJVcENvdW50KTsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRpZXJVcENvdW50KCkKKyAgICAgICAgICAgIDogbV9jb3VudChPcHRpb25z
Ojp3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50KCkgKiAyKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBUaWVyVXBDb3VudChUaWVyVXBDb3VudCYmIG90aGVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb3VudCA9PSBPcHRpb25zOjp3ZWJBc3NlbWJseU9N
R1RpZXJVcENvdW50KCkgKiAyKTsKKyAgICAgICAgICAgIG1fY291bnQgPSBvdGhlci5tX2NvdW50
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHVpbnQzMl90IGxvb3BEZWNyZW1lbnQoKSB7
IHJldHVybiBPcHRpb25zOjp3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQoKSAqIDI7IH0KKyAgICAg
ICAgc3RhdGljIHVpbnQzMl90IGZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSB7IHJldHVybiBPcHRp
b25zOjp3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSAqIDI7IH0KKworICAgICAg
ICBib29sIHNob3VsZFN0YXJ0VGllclVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICEoV1RGOjphdG9taWNFeGNoYW5nZU9yKCZtX2NvdW50LCAxKSAmIDEpOworICAgICAgICB9CisK
KyAgICAgICAgaW50MzJfdCBjb3VudCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxpbnQzMl90Piht
X2NvdW50KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdWludDMyX3QgbV9jb3VudDsKKyAg
ICB9OworICAgIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3Qu
Y3BwCmluZGV4IDVmYWRmY2IxMzU3MDkwOTMyMmZhODc5ZjViNzZkNDY5OWJlOWMzZDguLjc2YTg3
YWMxYjQ3MzZmM2NmMzdjMzUzOWRiYzk2MWY2Nzg2YTAxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApAQCAtNzQsMTAgKzc0LDggQEAgcHJvdGVjdGVk
OgogCiAgICAgICAgICAgICBlbGVtZW50ID0gcXVldWUucGVlaygpOwogICAgICAgICAgICAgLy8g
T25seSBvbmUgdGhyZWFkIHNob3VsZCB2YWxpZGF0ZS9wcmVwYXJlLgotICAgICAgICAgICAgaWYg
KCFxdWV1ZS5wZWVrKCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKKyAgICAgICAgICAgIGlm
ICghcXVldWUucGVlaygpLnBsYW4tPm11bHRpVGhyZWFkZWQoKSkKICAgICAgICAgICAgICAgICBx
dWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7
Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChlbGVtZW50LnBsYW4tPmhhc1dvcmso
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKQEAgLTEwMCwxMyAr
OTgsMTIgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIFBsYW4qIHBsYW4gPSBlbGVtZW50LnBsYW4u
Z2V0KCk7CiAgICAgICAgIEFTU0VSVChwbGFuKTsKLSAgICAgICAgaWYgKCFwbGFuLT5oYXNCZWVu
UHJlcGFyZWQoKSkgewotICAgICAgICAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgp
OwotICAgICAgICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRlKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xvY2spKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgcGxhbi0+cHJlcGFyZSgpOwogCisgICAgICAgIGJvb2wgd2FzTXVsdGlUaHJl
YWRlZCA9IHBsYW4tPm11bHRpVGhyZWFkZWQoKTsKKyAgICAgICAgcGxhbi0+d29yayhQbGFuOjpQ
YXJ0aWFsKTsKKworICAgICAgICBBU1NFUlQoIXBsYW4tPmhhc1dvcmsoKSB8fCBwbGFuLT5tdWx0
aVRocmVhZGVkKCkpOworICAgICAgICBpZiAocGxhbi0+aGFzV29yaygpICYmICF3YXNNdWx0aVRo
cmVhZGVkICYmIHBsYW4tPm11bHRpVGhyZWFkZWQoKSkgewogICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAgICAgICAgICBlbGVtZW50LnNldFRvTmV4
dFByaW9yaXR5KCk7CiAgICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLmVucXVldWUoV1RGTW92
ZShlbGVtZW50KSk7CkBAIC0xMTQsNyArMTExLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRlKGxvY2tlcik7CiAgICAgICAgIH0KIAotICAgICAgICBwbGFuLT5jb21w
aWxlRnVuY3Rpb25zKFBsYW46OlBhcnRpYWwpOwogICAgICAgICByZXR1cm4gY29tcGxldGUoaG9s
ZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtV29ya2xpc3QuaAppbmRleCBhZDRiMTA4OTkwNmUzNjc1NDkzN2I2OTliYmRmOGJk
Y2U1NGQyOTBiLi42YjY5MzUyYWE3NWM5YjVjOGMyM2JmMWYxNDljM2RhZWZiYTE2ZWE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApAQCAtNTcsMTMgKzU3LDYg
QEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZhdGVQbGFuKEpTUHJvbWlzZURlZmVycmVkKiwgUGxh
biopOwogICAgIHZvaWQgZGVhY3RpdmVQbGFuKEpTUHJvbWlzZURlZmVycmVkKiwgUGxhbiopOwog
Ci1wcml2YXRlOgotICAgIGNsYXNzIFRocmVhZDsKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwot
Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBUaWNrZXQ7Ci0gICAgVGlja2V0IG5leHRUaWNrZXQoKSB7
IHJldHVybiBtX2xhc3RHcmFudGVkVGlja2V0Kys7IH0KLQogICAgIGVudW0gY2xhc3MgUHJpb3Jp
dHkgewogICAgICAgICBTaHV0ZG93biwKICAgICAgICAgU3luY2hyb25vdXMsCkBAIC03Miw2ICs2
NSwxMyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgY29uc3QgY2hhciogcHJpb3JpdHlTdHJpbmco
UHJpb3JpdHkpOwogCitwcml2YXRlOgorICAgIGNsYXNzIFRocmVhZDsKKyAgICBmcmllbmQgY2xh
c3MgVGhyZWFkOworCisgICAgdHlwZWRlZiB1aW50NjRfdCBUaWNrZXQ7CisgICAgVGlja2V0IG5l
eHRUaWNrZXQoKSB7IHJldHVybiBtX2xhc3RHcmFudGVkVGlja2V0Kys7IH0KKwogICAgIHN0cnVj
dCBRdWV1ZUVsZW1lbnQgewogICAgICAgICBQcmlvcml0eSBwcmlvcml0eTsKICAgICAgICAgVGlj
a2V0IHRpY2tldDsKQEAgLTg3LDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGxl
ZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKICAgICB9CiAKLQogICAgIEJveDxMb2NrPiBt
X2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gbV9wbGFuRW5xdWV1
ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZsb3cgYnV0IHRoYXQncyB1
bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21waWxlIHRoaW5ncyBvZiB0
aGUgc2FtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmMTQwMmEzOTdkZTBjY2QyYjkzMDJiMTQzODg1
ZmMzODcxM2RmMjUwLi5kYzJkNjRlOTNmYjU2YTI4NjlhYzdhNDFjNGU0MjdjMmMxZjI4NDdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAi
V2FzbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJXYXNtUGxhbklubGluZXMuaCIKKyNpbmNsdWRlICJX
YXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgKaW5kZXggNTFjN2UzMWQzYmUwMjAwZTUyNjFjNGUxM2ZlZGJhNGEwM2Q0YjRl
Ni4uZGRkNmU1ODQzYmRlMWMzZTEyMzc4OTYzMTQxYTIyYzY2NDYyYjYyNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aApAQCAtNjgsMTQgKzY4LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlv
bkluZGV4U3BhY2UpOwogICAgIH0KLSAgICBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisg
ICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgIHJldHVy
biBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgfQogCi0gICAgdm9pZCogd2FzbVRvSnND
YWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICBXYXNtOjpXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGlt
cG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGltcG9ydFdhc21Ub0pTU3R1YihpbXBv
cnRJbmRleCk7CisgICAgICAgIHJldHVybiAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4
KTsKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNT
dHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5kZXggYzgyZTM1MmYxOWNjMmE0NDI2
ZGFhNDU5NzMzMGQ5M2VjYzJkYjUwMS4uNjgzZDE2NDk5ZGY0NGYzOTIyZmIyNTY5NjY1OWEwNTA2
NDUzNWJhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCkBAIC0xMjgsMTQgKzEyOCwxNCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlG
dW5jdGlvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKICAgICBtX2pz
RnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1bmN0aW9uLT5z
aWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQoKSk7CisgICAgbV9mdW5j
dGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAog
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5k
ZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0u
c2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0g
V2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKSwgZnVuY3Rp
b24tPndhc21FbnRyeXBvaW50KCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1
bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAppbmRleCBmNzcyZDk4ZDA2YzYxYzJhZDE1Y2IxY2JkODJlZTQ4YmZmYzAxYjRhLi44YTdh
MWQwYjY4ZWJhMTc2YWVhOGE1YjE1NzQ4OGY4OGYxYmNjZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMTU3
LDEwICsxNTcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2Vi
QXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEVuY29kZWRKU1Zh
bHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludCwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9u
KiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206
Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKLSAgICBBU1NFUlQoJmpzRW50cnlwb2ludCAhPSAm
d2FzbUVudHJ5cG9pbnQpOwotCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZt
LmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVy
ZSgpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVu
Y3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21FbnRy
eXBvaW50LCBzaWduYXR1cmVJbmRleCk7CkBAIC0xNzUsMTEgKzE3MywxMCBAQCBTdHJ1Y3R1cmUq
IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFdlYkFzc2VtYmx5RnVuY3Rpb25UeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5
RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2Fz
bUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpzRW50
cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnQs
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogICAgIDogQmFzZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2pzRW50cnlwb2ludChqc0VudHJ5cG9pbnQu
ZW50cnlwb2ludCgpKQotICAgICwgbV93YXNtRW50cnlwb2ludCh3YXNtRW50cnlwb2ludC5lbnRy
eXBvaW50KCkpCi0gICAgLCBtX3NpZ25hdHVyZUluZGV4KHNpZ25hdHVyZUluZGV4KQorICAgICwg
bV93YXNtRnVuY3Rpb24oV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihzaWduYXR1cmVJbmRleCwgd2Fz
bUVudHJ5cG9pbnQpKQogeyB9CiAKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDRjYmY1
ZGM0ZTIzOWYzNTBkYmRkMDU3ZDM4YjZmMTY1MmU4OTBmODIuLjNiYmEwOTNiMzJmMzU5NmZkZDc5
MDNjNDAzNTJjZjIwNTdiMTNkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKQEAgLTQ5LDE2ICs0OSwxOCBAQCBwdWJsaWM6
CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxl
ZSYganNFbnRyeXBvaW50LCBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWdu
YXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmlu
ZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBX
YXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29u
c3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQotICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmVJbmRleDsgfQotICAg
IHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50cnlwb2ludDsgfQorICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV93
YXNtRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KKyAgICBXYXNtOjpXYXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
d2FzbUZ1bmN0aW9uLmNvZGU7IH0KKyAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIGNhbGxhYmxl
RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbjsgfQorCiAgICAgdm9pZCog
anNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7IH0KIAogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJB
c3NlbWJseUZ1bmN0aW9uLCBtX2luc3RhbmNlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZXYXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJs
eUZ1bmN0aW9uLCBtX3dhc21FbnRyeXBvaW50KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21GdW5jdGlvbikgKyBXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KIAogcHJvdGVj
dGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKQEAgLTY2LDE4ICs2OCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAKIHByaXZhdGU6Ci0gICAgV2ViQXNzZW1i
bHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVl
JiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25h
dHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0gICAgLy8gV2UgY2FuIGhv
bGQgcmF3IHBvaW50ZXJzIHRvIHRoZXNlIGV4ZWN1dGFibGUgYWRkcmVzcyBwb2ludGVycyBzaW5j
ZQotICAgIC8vIHdlIGhhdmUgYSBHQyByZWZlcmVuY2UgdG8gb3VyIGluc3RhbmNlLCB3aGljaCBr
ZWVwcyBhbGl2ZSB0aGUgQ29kZUJsb2NrLAotICAgIC8vIHdoaWNoIG93bnMgdGhpcyBwb2ludGVy
LgotICAgIHZvaWQqIG1fanNFbnRyeXBvaW50OwotICAgIHZvaWQqIG1fd2FzbUVudHJ5cG9pbnQ7
Ci0gICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IHNpZ25hdHVyZUluZGV4IGJl
Y2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQorICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQg
dGhlIHJhdyBDYWxsYWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNhdXNlIHdlIGhhdmUgYSBy
ZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9k
dWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCi0gICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1
YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgotICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CisgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwg
U2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCisgICAgdm9pZCogbV9qc0Vu
dHJ5cG9pbnQ7CisgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBtX3dhc21GdW5jdGlvbjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDAxNzFmMmQ4MDA1
YzFmZDdiMDFmY2E4MGEwMjgwNWMzN2E3NWU1MDAuLjcwNTRhODljNWE4MjQ2YTA4Mjk4M2I0YTFm
NmU0MDI1ZTNhN2ViZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTEyNSwxMCArMTI1LDEwIEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICAgICAgLy8gICAgIGIuIEFwcGVu
ZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4K
ICAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVC
bG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZElu
ZGV4KTsKLSAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVl
ID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPndhc21FbnRy
eXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsK
ICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1v
ZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgp
OwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2Fz
bTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3Ry
aW5nOjpmcm9tVVRGOChleHAuZmllbGQpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3
YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZzo6ZnJv
bVVURjgoZXhwLmZpZWxkKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICBleHBv
cnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAg
bV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludENhbGxlZSA9IGNv
ZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1
bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXYXNtOjpDYWxsZWUmIHdhc21FbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2Us
IGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0
YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3MCwxNCArMjcwLDE0
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUm
IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBXYXNtOjpD
YWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAg
ICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxv
Y2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAgICAg
Ly8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3LyBpbmRl
eCAwLgogICAgICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRz
LmZvbyA9PT0gdGFibGUuZ2V0KDApPwogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwganNFbnRyeXBv
aW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBqc0VudHJ5cG9pbnRD
YWxsZWUsIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAKICAg
ICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsIGZ1bmN0aW9u
KTsKICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKaW5kZXggNzA4NDFm
MDVkODU1YThhMzA1YTU4OGRlNTU5ZGNkM2JlZGMyYmI1OS4uZGFiMjcwZjNiOTAxYjY1OWQyMjBl
NWYxNDgxZmFjMGI0ZTg1NjU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcApAQCAtMzgsMTIgKzM4LDEzIEBACiAj
aW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRU
aW1lci5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtUGxhbi5o
IgorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAj
aW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgogCiB1c2luZyBKU0M6Oldhc206OlBsYW47Cit1
c2luZyBKU0M6Oldhc206OkJCUVBsYW47CiAKIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUq
KTsKQEAgLTIxMSw3ICsyMTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5
dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgV2FzbTo6UGxhbiBwbGFu
KHZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIFBsYW46OlZhbGlkYXRpb24sIFBsYW46
OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4odm0sIGJhc2UgKyBieXRlT2Zmc2V0
LCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwog
ICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVy
ZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggMTcxMWUwNDhkYzc0ZjVkMzJmZGU0YTJkOGM0MWQzNTRk
MmQ3Mjc0ZC4uYjIwYjU0YjMyMjcwNTViMTc5NTdkNjMzN2E4MGY5NTE1YmIyZTI3NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNTIsMTAgKzUyLDkgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChleGVjKSkpOwogfQogCi1X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHZvaWQqIHdhc21FbnRyeXBvaW50
Q29kZSkKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHdhc21GdW5jdGlvbikKICAgICA6IEJhc2Uo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQotICAgICwgbV93YXNtRW50cnlwb2ludENvZGUo
d2FzbUVudHJ5cG9pbnRDb2RlKQotICAgICwgbV9zaWduYXR1cmVJbmRleChzaWduYXR1cmVJbmRl
eCkKKyAgICAsIG1fd2FzbUZ1bmN0aW9uKHdhc21GdW5jdGlvbikKIHsgfQogCiBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5z
aWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaywgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCkBAIC02Myw3ICs2Miw3IEBAIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlu
aGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5mbygpKSwgIldlIHNob3Vs
ZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5h
bWUgPSAiIjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1
bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBjb2RlQmxvY2stPndhc21Ub0pzQ2Fs
bFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0
dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oc2lnbmF0dXJlSW5kZXgsIGNvZGVCbG9jay0+
d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkpKTsKICAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBjb2RlQmxvY2sp
OwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAppbmRleCBlOTYzN2Q3OWFh
ODU3YzBlNDVmOGYwZTc5NmY5ODdhOTM0MTQ2MmZlLi45ZjZkMzQ2ZmIzZTQ3MDBlMDQ5NDM0YTRk
ZTgzMWI1ZTRlMmE4Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKQEAgLTQzLDggKzQzLDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7
CiAKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2lnbmF0dXJlSW5kZXg7IH0KLSAgICB2b2lkKiB3YXNtRW50cnlwb2ludCgpIHsgcmV0
dXJuIG1fd2FzbUVudHJ5cG9pbnRDb2RlOyB9CisgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbi5zaWduYXR1cmVJbmRl
eDsgfQorICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uICB3YXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uLmNvZGU7IH0KKyAg
ICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIGNhbGxhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX3dhc21GdW5jdGlvbjsgfQogICAgIEpTT2JqZWN0KiBmdW5jdGlvbigpIHsgcmV0dXJuIG1f
ZnVuY3Rpb24uZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgpAQCAtNTMsMTcgKzU0LDE2IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgs
IHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSk7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxhYmxlRnVuY3Rp
b24pOwogCiAgICAgLy8gV2Uga2VlcCBhIHJlZmVyZW5jZSB0byBvdXIgQ29kZUJsb2NrIGJlY2F1
c2Ugd2UgaGF2ZSBhIHJhdwogICAgIC8vIHBvaW50ZXIgdG8gYXNtIGNvZGUgdGhhdCBpdCBvd25z
LgogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsK
ICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247Ci0gICAgdm9pZCogbV93YXNt
RW50cnlwb2ludENvZGU7Ci0gICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IHNp
Z25hdHVyZUluZGV4IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQorICAgIC8vIEl0J3Mgc2Fm
ZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxsYWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBh
IHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBDb2RlQmxvY2ssIHdoaWNoIHBvaW50cyB0byB0aGUg
TW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCi0gICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBh
Y3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgotICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CisgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1
YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCisgICAgV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbiBtX3dhc21GdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBm
ZjUyYTE0ZjkyODQ5NTUzMDQ5ZWM1YzRiMTgzNzM2ZjM2MWNiNjdjLi4zODk0YTRjZGVhZGZjYjAz
Zjg4NjJkMTc4OWNmNGFhMzNhYmMzM2U4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZwor
KysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTA0LTI2ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5
OiBJbXBsZW1lbnQgdGllciB1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwMTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL3RyYXAtYWZ0ZXItY3Jvc3MtaW5zdGFu
Y2UtY2FsbC5qczoKKyAgICAgICAgKiB3YXNtL3RpZXItdXAvanMtdG8td2FzbS5qczogQWRkZWQu
CisgICAgICAgIChhc3luYy50ZXN0KToKKyAgICAgICAgKiB3YXNtL3RpZXItdXAvd2FzbS10by13
YXNtLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzeW5jLnRlc3QpOgorCiAyMDE3LTA0LTI1ICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMjE1NDc2LgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL3RyYXAtYWZ0ZXItY3Jvc3MtaW5zdGFuY2UtY2FsbC5qcyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy90cmFwLWFmdGVyLWNyb3NzLWluc3RhbmNlLWNhbGwuanMKaW5kZXggY2Fj
M2Q2ZTRlODA3NzY2NjRhMTE0NTcwZDM0OWVkN2NjMDgwMTE3Yy4uZDQzMGVmMTAyNWY2N2Q2MjM5
NThiNWQ1MjFkMTBhMTEyMjRiYzIyMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL3RyYXAtYWZ0ZXItY3Jvc3MtaW5zdGFuY2UtY2FsbC5qcworKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvdHJhcC1hZnRlci1jcm9zcy1pbnN0YW5jZS1jYWxsLmpzCkBAIC01
OSw2ICs1OSw2IEBAIGZ1bmN0aW9uIHdhc21GcmFtZUNvdW50RnJvbUVycm9yKGUpIHsKIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CiAgICAgY29uc3QgZTEgPSBhc3NlcnQudGhyb3dz
KCgpID0+IGZvbzEobnVtUGFnZXMgKiBwYWdlU2l6ZSArIDEpLCBXZWJBc3NlbWJseS5SdW50aW1l
RXJyb3IsICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKICAgICBhc3NlcnQuZXEod2Fz
bUZyYW1lQ291bnRGcm9tRXJyb3IoZTEpLCAyKTsKLSAgICBjb25zdCBlMiA9IGFzc2VydC50aHJv
d3MoKCkgPT4gZm9vMShudW1QYWdlcyAqIHBhZ2VTaXplICsgMSksIFdlYkFzc2VtYmx5LlJ1bnRp
bWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworICAgIGNvbnN0IGUyID0g
YXNzZXJ0LnRocm93cygoKSA9PiBmb28yKG51bVBhZ2VzICogcGFnZVNpemUgKyAxKSwgV2ViQXNz
ZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7CiAgICAg
YXNzZXJ0LmVxKHdhc21GcmFtZUNvdW50RnJvbUVycm9yKGUyKSwgMik7CiB9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vdGllci11cC9qcy10by13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3RpZXIt
dXAvanMtdG8td2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTM5MTM5NzBhNGE1MGQyNjI2ZWMxYmE2MjVk
ZDIwZGY4YzMyZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3RpZXItdXAvanMt
dG8td2FzbS5qcwpAQCAtMCwwICsxLDI1IEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4v
YXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworCithc3lu
YyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAuUmV0
dXJuKCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9
IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCB7aW5zdGFuY2V9ID0gYXdh
aXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluLCB7fSk7CisKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDAwMDA7IGkrKykKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Zm9vKCksIDQyKTsKK30KKworYXNzZXJ0LmFzeW5jVGVzdCh0ZXN0KCkpOwpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3RpZXItdXAvd2FzbS10by13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3RpZXIt
dXAvd2FzbS10by13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyN2Q5MGQ3Zjk0NTg0NDUwYmEyNDAxNzMx
MzUyMmQ0ODdkOGNiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdGllci11cC93
YXNtLXRvLXdhc20uanMKQEAgLTAsMCArMSw0NyBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20g
Jy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKwor
YXN5bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigp
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBb
ImkzMiJdLCByZXQ6ICJpMzIiIH0sIFsiaTMyIl0pCisgICAgICAgIC5CbG9jaygiaTMyIikKKyAg
ICAgICAgLkxvb3AoImkzMiIsIGIgPT4KKyAgICAgICAgICAgICAgICBiLkdldExvY2FsKDEpCisg
ICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMkVxeigpCisg
ICAgICAgICAgICAgICAgLkJySWYoMSkKKworICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAg
ICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkkzMkFkZCgpCisgICAg
ICAgICAgICAgICAgLlNldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkkzMlN1YigpCisg
ICAgICAgICAgICAgICAgLlNldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkJyKDApCisKKyAg
ICAgICAgKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigiYmFyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuSTMyQ29u
c3QoNDIpCisgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IHtpbnN0YW5jZX0gPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW4sIHt9
KTsKKworICAgIGNvbnN0IGl0ZXJzID0gMTAwMDAwCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDA7IGkrKykKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKGl0ZXJzKSwg
NDIgKiBpdGVycyk7Cit9CisKK2Fzc2VydC5hc3luY1Rlc3QodGVzdCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>