<?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>194187</bug_id>
          
          <creation_ts>2019-02-01 20:15:36 -0800</creation_ts>
          <short_desc>[JSC] Decouple JIT related data from CodeBlock</short_desc>
          <delta_ts>2019-02-04 17:34:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>193606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1501429</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 20:15:36 -0800</bug_when>
    <thetext>[JSC] Decouple JIT related data from CodeBlock</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501431</commentid>
    <comment_count>1</comment_count>
      <attachid>360954</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 20:24:13 -0800</bug_when>
    <thetext>Created attachment 360954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501434</commentid>
    <comment_count>2</comment_count>
      <attachid>360956</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 20:40:53 -0800</bug_when>
    <thetext>Created attachment 360956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501435</commentid>
    <comment_count>3</comment_count>
      <attachid>360957</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 20:50:40 -0800</bug_when>
    <thetext>Created attachment 360957
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501436</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 21:06:11 -0800</bug_when>
    <thetext>FYI, there are list of functions which create JITData in RAMification. We can ensure that JITData is only created by JIT compilers, or after CodeBlock is JIT compiled.

JSC::DFG::SpeculativeJIT::compileValueAdd(JSC::DFG::Node*)
JSC::DFG::SpeculativeJIT::compileValueMul(JSC::DFG::Node*)
JSC::DFG::SpeculativeJIT::compileValueNegate(JSC::DFG::Node*)
JSC::DFG::SpeculativeJIT::compileValueSub(JSC::DFG::Node*)
JSC::DFG::SpeculativeJIT::emitCall(JSC::DFG::Node*)
JSC::JIT::emit_op_add(JSC::Instruction const*)
JSC::JIT::emit_op_get_by_val(JSC::Instruction const*)
JSC::JIT::emit_op_has_indexed_property(JSC::Instruction const*)
JSC::JIT::emit_op_mul(JSC::Instruction const*)
JSC::JIT::emit_op_negate(JSC::Instruction const*)
JSC::JIT::emit_op_sub(JSC::Instruction const*)
JSC::JIT::privateCompileSlowCases()
JSC::JITGetByIdGenerator::JITGetByIdGenerator(JSC::CodeBlock*, JSC::CodeOrigin, JSC::CallSiteIndex, JSC::RegisterSet const&amp;, WTF::UniquedStringImpl*, JSC::JSValueRegs, JSC::JSValueRegs, JSC::AccessType)
JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator(JSC::CodeBlock*, JSC::CodeOrigin, JSC::CallSiteIndex, JSC::RegisterSet const&amp;, WTF::UniquedStringImpl*, JSC::JSValueRegs, JSC::JSValueRegs, JSC::JSValueRegs, JSC::AccessType)
JSC::JITInByIdGenerator::JITInByIdGenerator(JSC::CodeBlock*, JSC::CodeOrigin, JSC::CallSiteIndex, JSC::RegisterSet const&amp;, WTF::UniquedStringImpl*, JSC::JSValueRegs, JSC::JSValueRegs)
JSC::JITInstanceOfGenerator::JITInstanceOfGenerator(JSC::CodeBlock*, JSC::CodeOrigin, JSC::CallSiteIndex, JSC::RegisterSet const&amp;, JSC::X86Registers::RegisterID, JSC::X86Registers::RegisterID, JSC::X86Registers::RegisterID, JSC::X86Registers::RegisterID, JSC::X86Registers::RegisterID, bool)
JSC::JITPutByIdGenerator::JITPutByIdGenerator(JSC::CodeBlock*, JSC::CodeOrigin, JSC::CallSiteIndex, JSC::RegisterSet const&amp;, JSC::JSValueRegs, JSC::JSValueRegs, JSC::X86Registers::RegisterID, JSC::ECMAMode, JSC::PutKind)
JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine(JSC::MacroAssemblerCodeRef&lt;(WTF::PtrTag)49594&gt; const&amp;, JSC::VM&amp;, JSC::JSCell const*, JSC::ExecState*, JSC::CallLinkInfo&amp;, WTF::Vector&lt;JSC::PolymorphicCallCase, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, std::__1::unique_ptr&lt;unsigned int [], WTF::FastFree&lt;unsigned int []&gt; &gt;&amp;&amp;)
JSC::linkDirectFor(JSC::ExecState*, JSC::CallLinkInfo&amp;, JSC::CodeBlock*, JSC::MacroAssemblerCodePtr&lt;(WTF::PtrTag)357&gt;)
JSC::linkFor(JSC::ExecState*, JSC::CallLinkInfo&amp;, JSC::CodeBlock*, JSC::JSObject*, JSC::MacroAssemblerCodePtr&lt;(WTF::PtrTag)357&gt;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileCallOrConstruct()::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileCallOrConstructVarargs()::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileCallOrConstructVarargsSpread()::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileDirectCallOrConstruct()::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileTailCall()::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), void JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileBinaryMathIC&lt;JSC::JITAddGenerator, long long (*)(JSC::ExecState*, long long, long long, JSC::JITBinaryMathIC&lt;JSC::JITAddGenerator&gt;*), long long (*)(JSC::ExecState*, long long, long long), void&gt;(JSC::ArithProfile*, JSC::Instruction const*, long long (*)(JSC::ExecState*, long long, long long, JSC::JITBinaryMathIC&lt;JSC::JITAddGenerator&gt;*
), long long (*)(JSC::ExecState*, long long, long long))::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
WTF::SharedTaskFunctor&lt;void (JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;), void JSC::FTL::(anonymous namespace)::LowerDFGToB3::compileBinaryMathIC&lt;JSC::JITSubGenerator, long long (*)(JSC::ExecState*, long long, long long, JSC::JITBinaryMathIC&lt;JSC::JITSubGenerator&gt;*), long long (*)(JSC::ExecState*, long long, long long), void&gt;(JSC::ArithProfile*, JSC::Instruction const*, long long (*)(JSC::ExecState*, long long, long long, JSC::JITBinaryMathIC&lt;JSC::JITSubGenerator&gt;*
), long long (*)(JSC::ExecState*, long long, long long))::&apos;lambda&apos;(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)&gt;::run(JSC::CCallHelpers&amp;, JSC::B3::StackmapGenerationParams const&amp;)
void JSC::JIT::compileOpCall&lt;JSC::OpCall&gt;(JSC::Instruction const*, unsigned int)
void JSC::JIT::compileOpCall&lt;JSC::OpCallVarargs&gt;(JSC::Instruction const*, unsigned int)
void JSC::JIT::compileOpCall&lt;JSC::OpConstruct&gt;(JSC::Instruction const*, unsigned int)
void JSC::JIT::compileOpCall&lt;JSC::OpTailCall&gt;(JSC::Instruction const*, unsigned int)
void JSC::JIT::emit_op_put_by_val&lt;JSC::OpPutByVal&gt;(JSC::Instruction const*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501445</commentid>
    <comment_count>5</comment_count>
      <attachid>360957</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-01 21:53:59 -0800</bug_when>
    <thetext>Comment on attachment 360957
Patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1364
&gt;  void CodeBlock::finalizeBaselineJITInlineCaches()

Don’t we want to be holding the lock while iterating these data structures?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:989
&gt; +    std::unique_ptr&lt;JITData&gt; m_jitData;

Why not just put this on the base class for JITCode for baseline and above? It would save us one pointer stored in CodeBlock</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501448</commentid>
    <comment_count>6</comment_count>
      <attachid>360957</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-01 21:55:12 -0800</bug_when>
    <thetext>Comment on attachment 360957
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:23
&gt; +        The size of CodeBlock is reduced from 512 to 352.

We should make sure we have a 352 byte size class if we don’t already</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501459</commentid>
    <comment_count>7</comment_count>
      <attachid>360957</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 23:12:37 -0800</bug_when>
    <thetext>Comment on attachment 360957
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:23
&gt;&gt; +        The size of CodeBlock is reduced from 512 to 352.
&gt; 
&gt; We should make sure we have a 352 byte size class if we don’t already

Since CodeBlock is in IsoSubspace, we use 352 as its size.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1364
&gt;&gt;  void CodeBlock::finalizeBaselineJITInlineCaches()
&gt; 
&gt; Don’t we want to be holding the lock while iterating these data structures?

Since this is finalizer in GC, concurrent compiler threads already stop.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:989
&gt;&gt; +    std::unique_ptr&lt;JITData&gt; m_jitData;
&gt; 
&gt; Why not just put this on the base class for JITCode for baseline and above? It would save us one pointer stored in CodeBlock

Currently, m_jitCode is accessed from JIT code through jitCodeOffset(). Maybe, we can do that, but I would like to do that in a separate patch.
And we also have a chance to put baseline counter, and OSR counters in this data. But currently, they are also touched from JIT code. That&apos;s why I&apos;m now postponing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501460</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-01 23:15:53 -0800</bug_when>
    <thetext>Committed r240893: &lt;https://trac.webkit.org/changeset/240893&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501461</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-01 23:16:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/47760033&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360954</attachid>
            <date>2019-02-01 20:24:13 -0800</date>
            <delta_ts>2019-02-01 20:40:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194187-20190201202413.patch</filename>
            <type>text/plain</type>
            <size>37689</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MzQ5NjE5YTYzNTYyNDBiZjU0MTJhYzI1MTY2NzY0NjdmNDI1MjE0Li42YzNhNWE1MDE1NGJjZDBh
OTg2YjlmM2I5Njg3OTdhNjY2MGI5YmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAxOS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERlY291cGxlIEpJVCByZWxhdGVkIGRhdGEgZnJvbSBDb2RlQmxv
Y2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGVC
bG9jayBob2xkcyBidW5jaCBvZiBkYXRhIHdoaWNoIGlzIG9ubHkgdXNlZCBhZnRlciBKSVQgc3Rh
cnRzIGNvbXBpbGluZyBpdC4KKyAgICAgICAgV2UgaGF2ZSB0aHJlZSB0eXBlcyBvZiBkYXRhIGlu
IENvZGVCbG9jay4KKworICAgICAgICAxLiBUaGUgZGF0YSB3aGljaCBpcyBhbHdheXMgdXNlZC4g
Q29kZUJsb2NrIG5lZWRzIHRvIGhvbGQgaXQuCisgICAgICAgIDIuIFRoZSBkYXRhIHdoaWNoIGlz
IHRvdWNoZWQgZXZlbiBpbiBMTEludCwgYnV0IGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiBKSVQg
dGllcnMuIFRoZSBleGFtcGxlIGlzIHByb2ZpbGluZy4KKyAgICAgICAgMy4gVGhlIGRhdGEgd2hp
Y2ggaXMgdXNlZCBhZnRlciB0aGUgSklUIGNvbXBpbGVyIHN0YXJ0cyBydW5uaW5nIGZvciB0aGUg
Z2l2ZW4gQ29kZUJsb2NrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZGVjb3VwbGVzICgzKSBmcm9t
IENvZGVCbG9jayBhcyBDb2RlQmxvY2s6OkpJVERhdGEuIEV2ZW4gaWYgd2UgaGF2ZSBidW5jaCBv
ZiBDb2RlQmxvY2tzLCBvbmx5IHNtYWxsCisgICAgICAgIG51bWJlciBvZiB0aGVtIGdldHMgSklU
IGNvbXBpbGF0aW9uLiBBbHdheXMgYWxsb2NhdGluZyAoMykgZGF0YSBlbmxhcmdlcyB0aGUgc2l6
ZSBvZiBDb2RlQmxvY2ssIGxlYWRpbmcgdG8gdGhlCisgICAgICAgIG1lbW9yeSB3YXN0ZS4gUG90
ZW50aWFsbHkgd2UgY2FuIGRlY291cGxlICgyKSBpbiBhbm90aGVyIGRhdGEgc3RydWN0dXJlLCBi
dXQgd2UgZmlyc3QgZG8gKDMpIHNpbmNlICgzKSBpcyBiZW5lZmljaWFsCisgICAgICAgIGluIGJv
dGggbm9uLUpJVCBhbmQgKkpJVCogbW9kZXMuCisKKyAgICAgICAgSklURGF0YSBpcyBjcmVhdGVk
IG9ubHkgd2hlbiBKSVQgY29tcGlsZXIgd2FudHMgdG8gdXNlIGl0LiBTbyBpdCBjYW4gYmUgY29u
Y3VycmVudGx5IGNyZWF0ZWQgYW5kIHVzZWQsIHNvIGl0IGlzIGd1YXJkZWQKKyAgICAgICAgYnkg
dGhlIGxvY2sgb2YgQ29kZUJsb2NrLgorCisgICAgICAgIFRoZSBzaXplIG9mIENvZGVCbG9jayBp
cyByZWR1Y2VkIGZyb20gNTEyIHRvIDM1Mi4KKworICAgICAgICBUaGlzIHBhdGNoIGltcHJvdmVz
IG1lbW9yeSBmb290cHJpbnQgYW5kIGdldHMgMS4xJSBpbXByb3ZlbWVudCBpbiBSQU1pZmljYXRp
b24uCisKKyAgICAgICAgICAgIEZvb3RwcmludCBnZW9tZWFuOiAzNjY5NjUwMyAoMzQuOTk3IE1C
KQorICAgICAgICAgICAgUGVhayBGb290cHJpbnQgZ2VvbWVhbjogMzg1OTU5ODggKDM2LjgwOCBN
QikKKyAgICAgICAgICAgIFNjb3JlOiAzNzYzNDI2MyAoMzUuODkxIE1CKQorCisgICAgICAgICAg
ICBGb290cHJpbnQgZ2VvbWVhbjogMzcxNzI3NjggKDM1LjQ1MSBNQikKKyAgICAgICAgICAgIFBl
YWsgRm9vdHByaW50IGdlb21lYW46IDM4OTc4Mjg4ICgzNy4xNzMgTUIpCisgICAgICAgICAgICBT
Y29yZTogMzgwNjQ4MjQgKDM2LjMwMSBNQikKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5h
bGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRJQ1N0YXR1c01hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3Vi
SUMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5kU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFk
ZEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJVERhdGEpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bGlua0luY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5n
UG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWlu
Z0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0Fu
ZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2Zp
bGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpkdW1wTWF0aElDU3RhdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGEpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENvZGVN
YXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzdHViSW5mb0JlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzdHViSW5mb0VuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExp
bmtJbmZvc0JlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlu
a0luZm9zRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlTWFw
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlJhcmVD
YXNlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlOjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxP
cHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKwogMjAxOS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBzb21lIG9mIElzb1N1YnNw
YWNlcyBmb3IgSlNGdW5jdGlvbiBzdWJjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGNkMTBhNDU4M2E3YTUwZjJlZjQ4NTNhMDlkYTNm
YWY2M2Q1OWRlYWMuLjY3ZTVhYjE1ZjVjNjFmZjJlNjQzY2RkNTY5OGViMDgwMTc5Y2Y2YWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04NjEs
MTAgKzg2MSwxMSBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIGRlc3RydWN0b3Jz
LgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJl
Z2luKCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
ID0gKml0ZXI7Ci0gICAgICAgIHN0dWItPmFib3V0VG9EaWUoKTsKLSAgICAgICAgc3R1Yi0+ZGVy
ZWYoKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAg
ICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KSB7CisgICAgICAgICAgICBzdHViSW5mby0+YWJvdXRUb0RpZSgpOworICAgICAgICAgICAgc3R1
YkluZm8tPmRlcmVmKCk7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KQEAgLTExMTIsOCArMTExMywxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpcwogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQot
ICAgICAgICAgICAgKCppdGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAg
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICBm
b3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
KyAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIApAQCAtMTM1MCwx
OCArMTM1MywyNSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygp
CiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQ29kZUJsb2NrOjpKSVREYXRhJiBDb2Rl
QmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCit7Cisg
ICAgQVNTRVJUKCFtX2ppdERhdGEpOworICAgIG1faml0RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
SklURGF0YT4oKTsKKyAgICByZXR1cm4gKm1faml0RGF0YTsKK30KKwogdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQogewotI2lmIEVOQUJMRShKSVQpCi0g
ICAgZm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
Ci0gICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CisgICAgaWYgKGF1dG8qIGppdERh
dGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dmlzaXRXZWFrKCp2bSgpKTsKIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5m
b3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2Vz
KHRoaXMpOworICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERh
dGEtPm1fc3R1YkluZm9zKQorICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5j
ZXModGhpcyk7CiAgICAgfQotI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKIHsKQEAgLTEzOTQsMTIgKzE0MDQsMTQgQEAgdm9p
ZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIElD
U3RhdHVzTWFwJiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6
aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA6IG1fc3R1YkluZm9zKQotICAgICAgICAgICAgcmVzdWx0LmFkZChzdHViSW5mby0+Y29k
ZU9yaWdpbiwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gc3R1YkluZm87
Ci0gICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBtX2NhbGxMaW5rSW5m
b3MpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLCBJ
Q1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvOwot
ICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQotICAgICAg
ICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElD
U3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CisgICAgICAg
IGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICBmb3Ig
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8tPmNvZGVPcmlnaW4sIElDU3RhdHVzKCkp
Lml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9IHN0dWJJbmZvOworICAgICAgICAgICAgZm9yIChD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLCBJQ1N0
YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvOworICAg
ICAgICAgICAgZm9yIChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IGppdERhdGEtPm1fYnlWYWxJbmZv
cykKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmJ5VmFsSW5mbyA9IGJ5VmFs
SW5mbzsKKyAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE0MjksMzQgKzE0
NDEsNDEgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiByZXN1
bHQpCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CisgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIEpJVEFk
ZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIEpJVE11bElDKiBDb2RlQmxvY2s6
OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUs
IGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbik7CiB9CiAKIEpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7
CiB9CiAKIEpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJu
IG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIFN0cnVjdHVy
ZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiB7Ci0gICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykg
ewotICAgICAgICBpZiAoc3R1YkluZm8tPmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAg
ICAgICAgIHJldHVybiBzdHViSW5mbzsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAg
ICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZv
cykgeworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4p
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZvOworICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMTQ2NCw0MCArMTQ4Myw3MCBAQCBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogQnlW
YWxJbmZvKiBDb2RlQmxvY2s6OmFkZEJ5VmFsSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX2J5VmFsSW5mb3MuYWRkKCk7CisgICAg
cmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2J5VmFsSW5mb3MuYWRkKCk7CiB9CiAKIENh
bGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8oKQogewogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFk
ZCgpOworICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9jYWxsTGlua0luZm9zLmFk
ZCgpOwogfQogCiBDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2Fs
bExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVy
KS0+Y29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJu
ICppdGVyOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAo
YXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKSB7CisgICAgICAg
ICAgICBpZiAoY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFk
ZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRh
KGxvY2tlcik7CisgICAgaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNl
UHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJldHVybiAmaml0RGF0YS5tX3JhcmVDYXNl
UHJvZmlsZXMubGFzdCgpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50
IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdl
dCgpKSB7CisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBp
bnQ+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5t
X3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAgIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRl
Y29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2Rl
T2Zmc2V0KQoreworICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlmIChwcm9m
aWxlKQorICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOworICAgIHJldHVybiAwOwor
fQorCiB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSk7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwogICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5v
IG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2Fs
bAotICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBoYXZlIEpJ
VCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyB1
c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxs
IHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4KLSAgICBt
X3N0dWJJbmZvcy5jbGVhcigpOwotICAgIG1fY2FsbExpbmtJbmZvcy5jbGVhcigpOwotICAgIG1f
YnlWYWxJbmZvcy5jbGVhcigpOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGlzIGJlY2F1
c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBndWFyZGVk
IGJ5IHdoZXRoZXIKLSAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KLSAgICBtX3JhcmVDYXNlUHJv
ZmlsZXMuY2xlYXIoKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
eworICAgICAgICAvLyBXZSBjYW4gY2xlYXIgdGhlc2UgYmVjYXVzZSBubyBvdGhlciB0aHJlYWQg
d2lsbCBoYXZlIHJlZmVyZW5jZXMgdG8gYW55IHN0dWIgaW5mb3MsIGNhbGwKKyAgICAgICAgLy8g
bGluayBpbmZvcywgb3IgYnkgdmFsIGluZm9zIGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0
dGVtcHRzIHRvIHF1ZXJ5IHRoZXNlIGRhdGEKKyAgICAgICAgLy8gc3RydWN0dXJlcyB1c2luZyB0
aGUgY29uY3VycmVudCBBUEkgKGdldElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxsIHJldHVy
biBub3RoaW5nIGlmIHdlCisgICAgICAgIC8vIGRvbid0IGhhdmUgSklUIGNvZGUuCisgICAgICAg
IGppdERhdGEtPm1fc3R1YkluZm9zLmNsZWFyKCk7CisgICAgICAgIGppdERhdGEtPm1fY2FsbExp
bmtJbmZvcy5jbGVhcigpOworICAgICAgICBqaXREYXRhLT5tX2J5VmFsSW5mb3MuY2xlYXIoKTsK
KyAgICAgICAgLy8gV2UgY2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0
byB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgorICAgICAgICAv
LyB0aGVyZSBpcyBKSVQgY29kZS4KKyAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVz
LmNsZWFyKCk7CisgICAgfQogfQogI2VuZGlmCiAKQEAgLTE1NDAsOCArMTU4OSwxMCBAQCB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsCiAgICAgfSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGZvciAo
QnlWYWxJbmZvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKGJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1f
aml0RGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogaml0
RGF0YS0+bV9ieVZhbEluZm9zKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYnlWYWxJbmZv
LT5jYWNoZWRTeW1ib2wpOworICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBA
IC0xNzg2LDcgKzE4MzcsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01v
ZGUgc2hyaW5rTW9kZSkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAKLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyNpZiBFTkFCTEUoSklU
KQorICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKQorICAgICAgICBqaXRE
YXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyNlbmRpZgogICAgIAogICAg
IGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMuc2hyaW5rVG9GaXQoKTsKQEAgLTE4MDMsMTMgKzE4NTcsMTcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKIHZvaWQgQ29kZUJsb2NrOjps
aW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyogaW5j
b21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2lu
Y29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2luY29taW5nQ2FsbHMucHVz
aChpbmNvbWluZyk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21p
bmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGluY29taW5nKTsKKyAgICB7CisgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOworICAgIH0KIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0xODE4LDEwICsxODc2LDEyIEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9p
bmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgp
KQotICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKLSAgICB3
aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0
YS5nZXQoKSkgeworICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2lu
KCkgIT0gaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAgICAgICAgaml0RGF0
YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAgICAgIHdoaWxl
IChqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IGppdERhdGEt
Pm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAgICAgICAgaml0RGF0YS0+
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIApAQCAtMjU3Myw3ICsyNjMzLDcgQEAgdm9pZCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYg
bnVtYmVyT2ZMaXZlTm9uQXIKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
bV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhsb2Nr
ZXIpOworICAgIGxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhsb2NrZXIpLmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbnMobG9ja2VyKTsKICNlbmRpZgogfQogCkBAIC0yNzMwLDkgKzI3OTAsOSBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgICAgICBkYXRhTG9nRigiXG4i
KTsKICAgICB9KTsKICAgICBkYXRhTG9nKCJSYXJlQ2FzZVByb2ZpbGUgZm9yICIsICp0aGlzLCAi
OlxuIik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmFyZUNhc2VQcm9m
aWxlcygpOyArK2kpIHsKLSAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNh
c2VQcm9maWxlKGkpOwotICAgICAgICBkYXRhTG9nRigiICAgYmMgPSAlZDogJXVcbiIsIHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CisgICAgaWYgKGF1dG8q
IGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChSYXJlQ2FzZVByb2Zp
bGUqIHByb2ZpbGUgOiBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMpCisgICAgICAgICAgICBk
YXRhTG9nRigiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHBy
b2ZpbGUtPm1fY291bnRlcik7CiAgICAgfQogfQogI2VuZGlmIC8vIEVOQUJMRShWRVJCT1NFX1ZB
TFVFX1BST0ZJTEUpCkBAIC0yOTM5LDI3ICsyOTk5LDYgQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENv
ZGVCbG9jazo6b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCiAgICAg
cmV0dXJuIG1faW5zdHJ1Y3Rpb25zLT5hdChvZmZzZXQgKyB0YXJnZXQpLnB0cigpOwogfQogCi1S
YXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6YWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29k
ZU9mZnNldCkKLXsKLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNlUHJvZmls
ZShieXRlY29kZU9mZnNldCkpOwotICAgIHJldHVybiAmbV9yYXJlQ2FzZVByb2ZpbGVzLmxhc3Qo
KTsKLX0KLQotUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICByZXR1cm4gdHJ5QmluYXJ5
U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKLSAgICAgICAgbV9yYXJlQ2FzZVByb2ZpbGVz
LCBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgZ2V0
UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6
OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0
KQotewotICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAg
cmV0dXJuIHByb2ZpbGUtPm1fY291bnRlcjsKLSAgICByZXR1cm4gMDsKLX0KLQogQXJpdGhQcm9m
aWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGFyaXRoUHJvZmls
ZUZvclBDKG1faW5zdHJ1Y3Rpb25zLT5hdChieXRlY29kZU9mZnNldCkucHRyKCkpOwpAQCAtMzA4
MCwyMCArMzExOSwyNSBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJp
ZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKCkKICNpZiBFTkFCTEUoSklUKQogdm9pZCBDb2RlQmxv
Y2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1h
cD4mJiBtYXApIAogeyAKLSAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOwor
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKIH0KIAogT3B0aW9u
YWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCiB7Ci0gICAgaWYgKG1f
cGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNv
ZGVPcmlnaW4gPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAg
cmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgfQorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0
YS5nZXQoKSkgeworICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9
IGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgICAgICAgICAgfQogCi0gICAgZm9yIChhdXRv
IGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwotICAgICAgICBpZiAoc3R1Yi0+Y29udGFp
bnNQQyhwYykpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+
Y29kZU9yaWdpbik7CisgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LT5jb250YWluc1BDKHBjKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENv
ZGVPcmlnaW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KIAogICAgIGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9q
aXRDb2RlLT5maW5kUEModGhpcywgcGMpKQpAQCAtMzE5NSwyNCArMzIzOSwyNiBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkKICAgICBkb3VibGUgdG90YWxTdWJTaXplID0gMC4w
OwogCiAgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAg
ICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBjb2RlQmxvY2stPm1fYWRkSUNzKSB7Ci0gICAg
ICAgICAgICBudW1BZGRzKys7Ci0gICAgICAgICAgICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBjb2RlQmxv
Y2stPm1faml0RGF0YS5nZXQoKSkgeworICAgICAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMg
OiBqaXREYXRhLT5tX2FkZElDcykgeworICAgICAgICAgICAgICAgIG51bUFkZHMrKzsKKyAgICAg
ICAgICAgICAgICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBjb2RlQmxvY2stPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICBudW1NdWxzKys7Ci0gICAgICAgICAgICB0b3RhbE11bFNpemUgKz0g
bXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoSklUTXVsSUMq
IG11bElDIDogaml0RGF0YS0+bV9tdWxJQ3MpIHsKKyAgICAgICAgICAgICAgICBudW1NdWxzKys7
CisgICAgICAgICAgICAgICAgdG90YWxNdWxTaXplICs9IG11bElDLT5jb2RlU2l6ZSgpOworICAg
ICAgICAgICAgfQogCi0gICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogY29kZUJsb2NrLT5t
X25lZ0lDcykgewotICAgICAgICAgICAgbnVtTmVncysrOwotICAgICAgICAgICAgdG90YWxOZWdT
aXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEpJ
VE5lZ0lDKiBuZWdJQyA6IGppdERhdGEtPm1fbmVnSUNzKSB7CisgICAgICAgICAgICAgICAgbnVt
TmVncysrOworICAgICAgICAgICAgICAgIHRvdGFsTmVnU2l6ZSArPSBuZWdJQy0+Y29kZVNpemUo
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGNvZGVC
bG9jay0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgIG51bVN1YnMrKzsKLSAgICAgICAgICAgIHRv
dGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgICAgIGZvciAoSklUU3Vi
SUMqIHN1YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKKyAgICAgICAgICAgICAgICBudW1TdWJz
Kys7CisgICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfTsKICAgICBoZWFwKCktPmZvckVhY2hDb2Rl
QmxvY2soY291bnRJQ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCmluZGV4IDhkMTcxZTQ1MGQxMmMwY2IzZWQ4NmNmMGU2ZDQ5YmRjODk3YTZmOGEuLmIwOTE2
ODM2MDhmZTE4MjIzZmI2Y2I4OTFmMDVhMzcwNTVjMWVlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTI0OSw2ICsyNDksMzEgQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1
c01hcCYgcmVzdWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklUKQorICAgIHN0cnVjdCBKSVREYXRh
IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CisgICAgICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7CisgICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7CisgICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CisgICAg
ICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9jYWxsTGlua0luZm9zOworICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJ
bmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7
CisgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHM7CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fcmFy
ZUNhc2VQcm9maWxlczsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFw
PiBtX3BjVG9Db2RlT3JpZ2luTWFwOworICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsK
KyAgICB9OworCisgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlcikKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKKyAg
ICAgICAgICAgIHJldHVybiAqbV9qaXREYXRhOworICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0
YVNsb3cobG9ja2VyKTsKKyAgICB9CisgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJik7CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQXJp
dGhQcm9maWxlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVs
SUMoQXJpdGhQcm9maWxlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICBKSVROZWdJQyogYWRk
SklUTmVnSUMoQXJpdGhQcm9maWxlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI2Nyw4ICsy
OTIsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKSVRTdWJJQyog
YWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKLSAgICBhdXRv
IHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9Ci0gICAgYXV0
byBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CiAKICAgICAvLyBP
KG4pIG9wZXJhdGlvbi4gVXNlIGdldFN0dWJJbmZvTWFwKCkgdW5sZXNzIHlvdSByZWFsbHkgb25s
eSBpbnRlbmQgdG8gZ2V0IG9uZQogICAgIC8vIHN0dWIgaW5mby4KQEAgLTI3NywxNCArMzAwLDQ4
IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIEJ5VmFsSW5mbyogYWRk
QnlWYWxJbmZvKCk7CiAKICAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOwotICAg
IGF1dG8gY2FsbExpbmtJbmZvc0JlZ2luKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2lu
KCk7IH0KLSAgICBhdXRvIGNhbGxMaW5rSW5mb3NFbmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5m
b3MuZW5kKCk7IH0KIAogICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNlZCBw
cmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UKICAgICAvLyB0aGF0
IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1c2Ug
dGhpcywgeW91J3JlIHJlYWxseQogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFw
IHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8q
IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7
CiAgICAgCisgICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQor
ICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFw
KTsKKyAgICB9CisgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCisgICAgeworICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOworICAgIH0KKworICAgIHZvaWQgc2V0
UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsK
KyAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOworCisgICAgUmFyZUNh
c2VQcm9maWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBS
YXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIGludCBieXRlY29kZU9mZnNldCk7CisgICAgdW5zaWduZWQgcmFy
ZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBpbnQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2Fz
ZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklU
UHJvZmlsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJl
Q2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQp
OworICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VN
aW5pbXVtQ291bnQoKTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBi
eXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxp
bmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJv
ZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAg
ICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3Vu
dCgpOworICAgIH0KKwogICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIHdhbnQgdG8gcmVhdHRl
bXB0IGNvbXBpbGluZyBzb21ldGhpbmcgd2l0aCB0aGUgYmFzZWxpbmUgSklULiBJZGVhbGx5CiAg
ICAgLy8gdGhlIGJhc2VsaW5lIEpJVCB3b3VsZCBub3QgYWRkIGRhdGEgdG8gQ29kZUJsb2NrLCBi
dXQgaW5zdGVhZCBpdCB3b3VsZCBwdXQgaXRzIGRhdGEgaW50bwogICAgIC8vIGEgbmV3bHkgY3Jl
YXRlZCBKSVRDb2RlLCB3aGljaCBjb3VsZCBiZSB0aHJvd24gYXdheSBpZiB3ZSBiYWlsIG9uIEpJ
VCBjb21waWxhdGlvbi4gVGhlbiB3ZQpAQCAtMzAyLDE3ICszNTksNiBAQCBjbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3Rh
dGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyopOwogCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewot
ICAgICAgICBtX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ppdENvZGVNYXA7Ci0gICAgfQotI2VuZGlmCi0KICAgICBjb25zdCBJbnN0cnVjdGlvbiog
b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRP
ZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CiAgICAgaW50IG91dE9mTGlu
ZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24pCkBA
IC00NDIsMjcgKzQ4OCw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CiAKLSAgICBSYXJl
Q2FzZVByb2ZpbGUqIGFkZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAg
IHVuc2lnbmVkIG51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpIHsgcmV0dXJuIG1fcmFyZUNhc2VQ
cm9maWxlcy5zaXplKCk7IH0KLSAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgcmFyZUNh
c2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotCi0g
ICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewot
ICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA+
PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOwotICAgIH0KLQot
ICAgIGJvb2wgY291bGRUYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAg
ICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0g
T3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlRm9yUEMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIApAQCAtNDk5LDcgKzUyNCw3IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMo
KVtpbmRleC5iaXRzKCldOwogICAgIH0KIAotICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUhvbGRlciYgbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkKKyAgICBDb21wcmVzc2Vk
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXImIGxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVzOwogICAgIH0KQEAgLTg0NywxMSArODcyLDYgQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIGVuc3VyZUNhdGNoTGl2ZW5lc3NJ
c0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRl
Y29kZU9mZnNldCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgc2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKLSAgICBPcHRpb25h
bDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwotI2VuZGlmCi0KICAgICBib29sIGhhc1Rh
aWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNUYWlsQ2FsbHMoKTsg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CkBAIC04NjgsOCArODg4LDkgQEAg
Y2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAKIHByb3RlY3RlZDoKICAgICB2b2lk
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQg
ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwotCisjZW5kaWYKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKICNlbHNlCkBAIC05
NjUsMTcgKzk4Niw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJz
OwogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1f
c3R1YkluZm9zOwotICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElD
PiBtX211bElDczsKLSAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJ
Qz4gbV9zdWJJQ3M7Ci0gICAgQmFnPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxD
YWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2Fs
bExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5n
Q2FsbHM7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2lj
UmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBo
aWNDYWxsczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0Nv
ZGVPcmlnaW5NYXA7Ci0gICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZl
IGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC05ODQsNyArOTk1LDYgQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAjZW5kaWYKICAgICBSZWZDb3VudGVkQXJyYXk8VmFs
dWVQcm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlczsKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7Ci0g
ICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVByb2ZpbGVz
OwogCiAgICAgLy8gQ29uc3RhbnQgUG9vbAogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWdp
c3RlcikgPT0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIFJlZ2lzdGVyX211c3RfYmVf
c2FtZV9zaXplX2FzX1dyaXRlQmFycmllcl9Vbmtub3duKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcAppbmRleCAwYzEwOGQ4YzZiYmE4MDJhNjY1YWMyODY5ODUzYWE2YjE4NTg5NTFhLi43
ZTNjYzk0ZmE0NjExMWRjYmFiMGYyMjA5ZjAxOTgyMDIzYjVmMDEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuY3BwCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKENDYWxsSGVscGVycyYgaml0LCBKU1ZhbHVlUmVn
CiAgICAgICAgIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJh
bmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSog
cHJvZmlsZSA9Ci0gICAgICAgICAgICB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVzKCkuYWRkKGxvY2tlciwga2V5KTsKKyAgICAgICAgICAgIHUubGF6eU9w
ZXJhbmQuY29kZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKS5hZGQobG9j
a2VyLCBrZXkpOwogICAgICAgICBqaXQuc3RvcmVWYWx1ZShyZWdzLCBwcm9maWxlLT5zcGVjRmFp
bEJ1Y2tldCgwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04OSw3ICs4OSw3IEBAIHZv
aWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1
ZSkKIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29k
ZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmls
ZSA9Ci0gICAgICAgICAgICB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzKCkuYWRkKGxvY2tlciwga2V5KTsKKyAgICAgICAgICAgIHUubGF6eU9wZXJhbmQu
Y29kZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKS5hZGQobG9ja2VyLCBr
ZXkpOwogICAgICAgICAqcHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkgPSBKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBiMWRjMjViMWI4NzhmMGI1ZDRm
NGQ0MWQ0MWRmMWZkYWQ5MjM2MmE0Li5jMjM3ODU1NGExZmNhN2U5NTcyMTUwMmRjODEyNWFlMWJk
NGZmM2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcApAQCAtNjk3OCw3ICs2OTc4LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlhbGl6
ZShtX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOwogCiAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBt
X2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZXMoKSk7CisgICAgICAgIG1fbGF6eU9wZXJhbmRzLmluaXRpYWxpemUo
bG9ja2VyLCBtX3Byb2ZpbGVkQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhsb2NrZXIp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgbG9j
ayBiZWNhdXNlIHdlIHdhbnQgdG8gZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJbmZvJ3MKICAgICAg
ICAgLy8gdG8gYmUgcG90ZW50aWFsbHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBhbmQgYmVjYXVzZSB0
aGUgcHJvZmlsZWQgYmxvY2sgY291bGQgYmUgaW4gdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCBhNmFhMzI2YjlhMjdhNDM1NDFkNTZlMTJkOGQ2NTYyODk2ZmI2ZDc4Li42OTg5NjM2Mzdm
ZGZiMTc1NGE3MGNhMGQ3OTZiZjU4Yzg1ZDc0OWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTIwNSwxMSArMjA1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5
VmFsKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlciwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0
QnlWYWwobG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQo
Vk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQpAQCAtMjE5LDE4ICsyMTksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21w
aWxlUHV0QnlWYWwoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICBq
aXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVE
aXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTI2MCwxMCArMjYwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21w
aWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1v
ZGUpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZv
KiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJ
ZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBjb25zdCBJZGVudGlmaWVy
Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4
IDYyOTJkYjIwYzczYjQyMGJiMmI2YmViZmE2YjA4MmFiMGIzNDQ1NGQuLmU4YmFiZDI4NGU0Y2Y4
M2U3ZmM3OGE1NmU2NmU1MzM0ZGQwMzM4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzM3LDggKzczNyw3IEBAIHN0YXRpYyBPcHRpbWl6YXRp
b25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFz
ZVZhbHVlCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwot
Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBjb2RlQmxvY2ssIGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6
OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTgyMiw3ICs4MjEsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogbwogICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAKLSAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbCgmdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZURpcmVj
dFB1dEJ5VmFsKGxvY2tlciwgJnZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTg4OSw3ICsxODg4LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9w
dGltaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUKICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAg
ICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAgICAgICAgSklUOjpj
b21waWxlR2V0QnlWYWwoJnZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbChsb2NrZXIs
ICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAg
ICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpP
cHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMmY0ZjMyZTEwNmI5ZGI1NDZi
ODRiMjRmN2I5ODk5NmM5ZDNkYjQ4MS4uZWE2ZmVmMGI2NDhiYzM0ZDcwYjE0Zjc5ZjVhNGU1ZTRi
YTY1YjIyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKQEAgLTEyOTMsNyArMTI5Myw3IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlm
aWVyQ2hlY2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0CiAg
ICAgfQogfQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgCkBAIC0xMzgwLDcgKzEzODAsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzcwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360956</attachid>
            <date>2019-02-01 20:40:53 -0800</date>
            <delta_ts>2019-02-01 20:50:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194187-20190201204052.patch</filename>
            <type>text/plain</type>
            <size>37782</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MzQ5NjE5YTYzNTYyNDBiZjU0MTJhYzI1MTY2NzY0NjdmNDI1MjE0Li42YzNhNWE1MDE1NGJjZDBh
OTg2YjlmM2I5Njg3OTdhNjY2MGI5YmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAxOS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERlY291cGxlIEpJVCByZWxhdGVkIGRhdGEgZnJvbSBDb2RlQmxv
Y2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGVC
bG9jayBob2xkcyBidW5jaCBvZiBkYXRhIHdoaWNoIGlzIG9ubHkgdXNlZCBhZnRlciBKSVQgc3Rh
cnRzIGNvbXBpbGluZyBpdC4KKyAgICAgICAgV2UgaGF2ZSB0aHJlZSB0eXBlcyBvZiBkYXRhIGlu
IENvZGVCbG9jay4KKworICAgICAgICAxLiBUaGUgZGF0YSB3aGljaCBpcyBhbHdheXMgdXNlZC4g
Q29kZUJsb2NrIG5lZWRzIHRvIGhvbGQgaXQuCisgICAgICAgIDIuIFRoZSBkYXRhIHdoaWNoIGlz
IHRvdWNoZWQgZXZlbiBpbiBMTEludCwgYnV0IGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiBKSVQg
dGllcnMuIFRoZSBleGFtcGxlIGlzIHByb2ZpbGluZy4KKyAgICAgICAgMy4gVGhlIGRhdGEgd2hp
Y2ggaXMgdXNlZCBhZnRlciB0aGUgSklUIGNvbXBpbGVyIHN0YXJ0cyBydW5uaW5nIGZvciB0aGUg
Z2l2ZW4gQ29kZUJsb2NrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZGVjb3VwbGVzICgzKSBmcm9t
IENvZGVCbG9jayBhcyBDb2RlQmxvY2s6OkpJVERhdGEuIEV2ZW4gaWYgd2UgaGF2ZSBidW5jaCBv
ZiBDb2RlQmxvY2tzLCBvbmx5IHNtYWxsCisgICAgICAgIG51bWJlciBvZiB0aGVtIGdldHMgSklU
IGNvbXBpbGF0aW9uLiBBbHdheXMgYWxsb2NhdGluZyAoMykgZGF0YSBlbmxhcmdlcyB0aGUgc2l6
ZSBvZiBDb2RlQmxvY2ssIGxlYWRpbmcgdG8gdGhlCisgICAgICAgIG1lbW9yeSB3YXN0ZS4gUG90
ZW50aWFsbHkgd2UgY2FuIGRlY291cGxlICgyKSBpbiBhbm90aGVyIGRhdGEgc3RydWN0dXJlLCBi
dXQgd2UgZmlyc3QgZG8gKDMpIHNpbmNlICgzKSBpcyBiZW5lZmljaWFsCisgICAgICAgIGluIGJv
dGggbm9uLUpJVCBhbmQgKkpJVCogbW9kZXMuCisKKyAgICAgICAgSklURGF0YSBpcyBjcmVhdGVk
IG9ubHkgd2hlbiBKSVQgY29tcGlsZXIgd2FudHMgdG8gdXNlIGl0LiBTbyBpdCBjYW4gYmUgY29u
Y3VycmVudGx5IGNyZWF0ZWQgYW5kIHVzZWQsIHNvIGl0IGlzIGd1YXJkZWQKKyAgICAgICAgYnkg
dGhlIGxvY2sgb2YgQ29kZUJsb2NrLgorCisgICAgICAgIFRoZSBzaXplIG9mIENvZGVCbG9jayBp
cyByZWR1Y2VkIGZyb20gNTEyIHRvIDM1Mi4KKworICAgICAgICBUaGlzIHBhdGNoIGltcHJvdmVz
IG1lbW9yeSBmb290cHJpbnQgYW5kIGdldHMgMS4xJSBpbXByb3ZlbWVudCBpbiBSQU1pZmljYXRp
b24uCisKKyAgICAgICAgICAgIEZvb3RwcmludCBnZW9tZWFuOiAzNjY5NjUwMyAoMzQuOTk3IE1C
KQorICAgICAgICAgICAgUGVhayBGb290cHJpbnQgZ2VvbWVhbjogMzg1OTU5ODggKDM2LjgwOCBN
QikKKyAgICAgICAgICAgIFNjb3JlOiAzNzYzNDI2MyAoMzUuODkxIE1CKQorCisgICAgICAgICAg
ICBGb290cHJpbnQgZ2VvbWVhbjogMzcxNzI3NjggKDM1LjQ1MSBNQikKKyAgICAgICAgICAgIFBl
YWsgRm9vdHByaW50IGdlb21lYW46IDM4OTc4Mjg4ICgzNy4xNzMgTUIpCisgICAgICAgICAgICBT
Y29yZTogMzgwNjQ4MjQgKDM2LjMwMSBNQikKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5h
bGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRJQ1N0YXR1c01hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3Vi
SUMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5kU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFk
ZEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJVERhdGEpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bGlua0luY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5n
UG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWlu
Z0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0Fu
ZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2Zp
bGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpkdW1wTWF0aElDU3RhdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGEpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENvZGVN
YXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzdHViSW5mb0JlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzdHViSW5mb0VuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExp
bmtJbmZvc0JlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlu
a0luZm9zRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlTWFw
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlJhcmVD
YXNlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlOjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxP
cHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKwogMjAxOS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBzb21lIG9mIElzb1N1YnNw
YWNlcyBmb3IgSlNGdW5jdGlvbiBzdWJjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGNkMTBhNDU4M2E3YTUwZjJlZjQ4NTNhMDlkYTNm
YWY2M2Q1OWRlYWMuLjg4NWRjZGYwZTM3N2MwNjE1NDI1YjQ4YWFkNDlkODM4YjJjNGJkOTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04NjEs
MTAgKzg2MSwxMSBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIGRlc3RydWN0b3Jz
LgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJl
Z2luKCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
ID0gKml0ZXI7Ci0gICAgICAgIHN0dWItPmFib3V0VG9EaWUoKTsKLSAgICAgICAgc3R1Yi0+ZGVy
ZWYoKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAg
ICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KSB7CisgICAgICAgICAgICBzdHViSW5mby0+YWJvdXRUb0RpZSgpOworICAgICAgICAgICAgc3R1
YkluZm8tPmRlcmVmKCk7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KQEAgLTExMTIsOCArMTExMywxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpcwogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQot
ICAgICAgICAgICAgKCppdGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAg
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICBm
b3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
KyAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIApAQCAtMTM1MCwx
OCArMTM1MywyNSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygp
CiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQ29kZUJsb2NrOjpKSVREYXRhJiBDb2Rl
QmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCit7Cisg
ICAgQVNTRVJUKCFtX2ppdERhdGEpOworICAgIG1faml0RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
SklURGF0YT4oKTsKKyAgICByZXR1cm4gKm1faml0RGF0YTsKK30KKwogdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQogewotI2lmIEVOQUJMRShKSVQpCi0g
ICAgZm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
Ci0gICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CisgICAgaWYgKGF1dG8qIGppdERh
dGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dmlzaXRXZWFrKCp2bSgpKTsKIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5m
b3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2Vz
KHRoaXMpOworICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERh
dGEtPm1fc3R1YkluZm9zKQorICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5j
ZXModGhpcyk7CiAgICAgfQotI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKIHsKQEAgLTEzOTQsMTIgKzE0MDQsMTQgQEAgdm9p
ZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIElD
U3RhdHVzTWFwJiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6
aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA6IG1fc3R1YkluZm9zKQotICAgICAgICAgICAgcmVzdWx0LmFkZChzdHViSW5mby0+Y29k
ZU9yaWdpbiwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gc3R1YkluZm87
Ci0gICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBtX2NhbGxMaW5rSW5m
b3MpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLCBJ
Q1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvOwot
ICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQotICAgICAg
ICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElD
U3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CisgICAgICAg
IGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICBmb3Ig
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8tPmNvZGVPcmlnaW4sIElDU3RhdHVzKCkp
Lml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9IHN0dWJJbmZvOworICAgICAgICAgICAgZm9yIChD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLCBJQ1N0
YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvOworICAg
ICAgICAgICAgZm9yIChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IGppdERhdGEtPm1fYnlWYWxJbmZv
cykKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmJ5VmFsSW5mbyA9IGJ5VmFs
SW5mbzsKKyAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE0MjksMzQgKzE0
NDEsNDEgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiByZXN1
bHQpCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CisgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIEpJVEFk
ZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIEpJVE11bElDKiBDb2RlQmxvY2s6
OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUs
IGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbik7CiB9CiAKIEpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7
CiB9CiAKIEpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJu
IG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIFN0cnVjdHVy
ZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiB7Ci0gICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykg
ewotICAgICAgICBpZiAoc3R1YkluZm8tPmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAg
ICAgICAgIHJldHVybiBzdHViSW5mbzsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAg
ICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZv
cykgeworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4p
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZvOworICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMTQ2NCw0MCArMTQ4Myw3MCBAQCBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogQnlW
YWxJbmZvKiBDb2RlQmxvY2s6OmFkZEJ5VmFsSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX2J5VmFsSW5mb3MuYWRkKCk7CisgICAg
cmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2J5VmFsSW5mb3MuYWRkKCk7CiB9CiAKIENh
bGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8oKQogewogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFk
ZCgpOworICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9jYWxsTGlua0luZm9zLmFk
ZCgpOwogfQogCiBDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2Fs
bExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVy
KS0+Y29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJu
ICppdGVyOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAo
YXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKSB7CisgICAgICAg
ICAgICBpZiAoY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFk
ZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRh
KGxvY2tlcik7CisgICAgaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNl
UHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJldHVybiAmaml0RGF0YS5tX3JhcmVDYXNl
UHJvZmlsZXMubGFzdCgpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50
IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdl
dCgpKSB7CisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBp
bnQ+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5t
X3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAgIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRl
Y29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2Rl
T2Zmc2V0KQoreworICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlmIChwcm9m
aWxlKQorICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOworICAgIHJldHVybiAwOwor
fQorCiB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSk7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwogICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5v
IG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2Fs
bAotICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBoYXZlIEpJ
VCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyB1
c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxs
IHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4KLSAgICBt
X3N0dWJJbmZvcy5jbGVhcigpOwotICAgIG1fY2FsbExpbmtJbmZvcy5jbGVhcigpOwotICAgIG1f
YnlWYWxJbmZvcy5jbGVhcigpOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGlzIGJlY2F1
c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBndWFyZGVk
IGJ5IHdoZXRoZXIKLSAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KLSAgICBtX3JhcmVDYXNlUHJv
ZmlsZXMuY2xlYXIoKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
eworICAgICAgICAvLyBXZSBjYW4gY2xlYXIgdGhlc2UgYmVjYXVzZSBubyBvdGhlciB0aHJlYWQg
d2lsbCBoYXZlIHJlZmVyZW5jZXMgdG8gYW55IHN0dWIgaW5mb3MsIGNhbGwKKyAgICAgICAgLy8g
bGluayBpbmZvcywgb3IgYnkgdmFsIGluZm9zIGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0
dGVtcHRzIHRvIHF1ZXJ5IHRoZXNlIGRhdGEKKyAgICAgICAgLy8gc3RydWN0dXJlcyB1c2luZyB0
aGUgY29uY3VycmVudCBBUEkgKGdldElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxsIHJldHVy
biBub3RoaW5nIGlmIHdlCisgICAgICAgIC8vIGRvbid0IGhhdmUgSklUIGNvZGUuCisgICAgICAg
IGppdERhdGEtPm1fc3R1YkluZm9zLmNsZWFyKCk7CisgICAgICAgIGppdERhdGEtPm1fY2FsbExp
bmtJbmZvcy5jbGVhcigpOworICAgICAgICBqaXREYXRhLT5tX2J5VmFsSW5mb3MuY2xlYXIoKTsK
KyAgICAgICAgLy8gV2UgY2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0
byB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgorICAgICAgICAv
LyB0aGVyZSBpcyBKSVQgY29kZS4KKyAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVz
LmNsZWFyKCk7CisgICAgfQogfQogI2VuZGlmCiAKQEAgLTE1NDAsOCArMTU4OSwxMCBAQCB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsCiAgICAgfSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGZvciAo
QnlWYWxJbmZvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKGJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1f
aml0RGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogaml0
RGF0YS0+bV9ieVZhbEluZm9zKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYnlWYWxJbmZv
LT5jYWNoZWRTeW1ib2wpOworICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBA
IC0xNzg2LDcgKzE4MzcsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01v
ZGUgc2hyaW5rTW9kZSkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAKLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyNpZiBFTkFCTEUoSklU
KQorICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKQorICAgICAgICBqaXRE
YXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyNlbmRpZgogICAgIAogICAg
IGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMuc2hyaW5rVG9GaXQoKTsKQEAgLTE4MDMsMTMgKzE4NTcsMTcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKIHZvaWQgQ29kZUJsb2NrOjps
aW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyogaW5j
b21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2lu
Y29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2luY29taW5nQ2FsbHMucHVz
aChpbmNvbWluZyk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21p
bmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGluY29taW5nKTsKKyAgICB7CisgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOworICAgIH0KIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0xODE4LDEwICsxODc2LDE3IEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9p
bmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgp
KQotICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKLSAgICB3
aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICBKSVREYXRhKiBqaXREYXRhID0gbnVsbHB0cjsK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgbV9qaXREYXRhLmdldCgpOworICAgIH0KKyAgICBpZiAoaml0RGF0YSkgeworICAgICAgICB3
aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gaml0RGF0YS0+bV9pbmNv
bWluZ0NhbGxzLmVuZCgpKQorICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJl
Z2luKCktPnVubGluaygqdm0oKSk7CisgICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5n
UG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGxzLmVuZCgpKQorICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIH0KIApAQCAtMjU3Myw3ICsyNjM4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFBy
ZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXIKICAg
ICB9CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhsb2NrZXIpOworICAgIGxhenlPcGVyYW5k
VmFsdWVQcm9maWxlcyhsb2NrZXIpLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMobG9ja2VyKTsK
ICNlbmRpZgogfQogCkBAIC0yNzMwLDkgKzI3OTUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFZh
bHVlUHJvZmlsZXMoKQogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICB9KTsKICAgICBkYXRh
TG9nKCJSYXJlQ2FzZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpOyArK2kpIHsKLSAgICAg
ICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxlKGkpOwotICAgICAg
ICBkYXRhTG9nRigiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQs
IHByb2ZpbGUtPm1fY291bnRlcik7CisgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEu
Z2V0KCkpIHsKKyAgICAgICAgZm9yIChSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgOiBqaXREYXRh
LT5tX3JhcmVDYXNlUHJvZmlsZXMpCisgICAgICAgICAgICBkYXRhTG9nRigiICAgYmMgPSAlZDog
JXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CiAg
ICAgfQogfQogI2VuZGlmIC8vIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCkBAIC0yOTM5
LDI3ICszMDA0LDYgQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENvZGVCbG9jazo6b3V0T2ZMaW5lSnVt
cFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCiAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
LT5hdChvZmZzZXQgKyB0YXJnZXQpLnB0cigpOwogfQogCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVC
bG9jazo6YWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBtX3Jh
cmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOwot
ICAgIHJldHVybiAmbV9yYXJlQ2FzZVByb2ZpbGVzLmxhc3QoKTsKLX0KLQotUmFyZUNhc2VQcm9m
aWxlKiBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRl
Y29kZU9mZnNldCkKLXsKLSAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmls
ZSwgaW50PigKLSAgICAgICAgbV9yYXJlQ2FzZVByb2ZpbGVzLCBtX3JhcmVDYXNlUHJvZmlsZXMu
c2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNv
ZGVPZmZzZXQpOwotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50
Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIFJhcmVDYXNlUHJv
ZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgcmV0dXJuIHByb2ZpbGUtPm1fY291
bnRlcjsKLSAgICByZXR1cm4gMDsKLX0KLQogQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNv
ZGVPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGFyaXRoUHJvZmlsZUZvclBDKG1faW5zdHJ1Y3Rpb25z
LT5hdChieXRlY29kZU9mZnNldCkucHRyKCkpOwpAQCAtMzA4MCwyMCArMzEyNCwyNSBAQCB2b2lk
IENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2Zp
bGVyKCkKICNpZiBFTkFCTEUoSklUKQogdm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2lu
TWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAogeyAKLSAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOworICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9y
aWdpbk1hcCA9IFdURk1vdmUobWFwKTsKIH0KIAogT3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJs
b2NrOjpmaW5kUEModm9pZCogcGMpCiB7Ci0gICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApIHsK
LSAgICAgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3BjVG9Db2Rl
T3JpZ2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0g
ICAgfQorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAgICAg
ICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IGppdERhdGEtPm1fcGNUb0NvZGVP
cmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlT3Jp
Z2luOworICAgICAgICAgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3N0dWJJbmZvcy5i
ZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YiA9ICppdGVyOwotICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCi0gICAgICAgICAg
ICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7CisgICAgICAg
ICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1Yklu
Zm9zKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb250YWluc1BDKHBjKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWJJbmZvLT5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChP
cHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9qaXRDb2RlLT5maW5kUEModGhpcywg
cGMpKQpAQCAtMzE5NSwyNCArMzI0NCwyNiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0
YXRzKCkKICAgICBkb3VibGUgdG90YWxTdWJTaXplID0gMC4wOwogCiAgICAgYXV0byBjb3VudElD
cyA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAgICAgICAgZm9yIChKSVRBZGRJQyog
YWRkSUMgOiBjb2RlQmxvY2stPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICBudW1BZGRzKys7Ci0g
ICAgICAgICAgICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBjb2RlQmxvY2stPm1faml0RGF0YS5nZXQoKSkg
eworICAgICAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBqaXREYXRhLT5tX2FkZElDcykg
eworICAgICAgICAgICAgICAgIG51bUFkZHMrKzsKKyAgICAgICAgICAgICAgICB0b3RhbEFkZFNp
emUgKz0gYWRkSUMtPmNvZGVTaXplKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgZm9yIChK
SVRNdWxJQyogbXVsSUMgOiBjb2RlQmxvY2stPm1fbXVsSUNzKSB7Ci0gICAgICAgICAgICBudW1N
dWxzKys7Ci0gICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogaml0RGF0YS0+bV9t
dWxJQ3MpIHsKKyAgICAgICAgICAgICAgICBudW1NdWxzKys7CisgICAgICAgICAgICAgICAgdG90
YWxNdWxTaXplICs9IG11bElDLT5jb2RlU2l6ZSgpOworICAgICAgICAgICAgfQogCi0gICAgICAg
IGZvciAoSklUTmVnSUMqIG5lZ0lDIDogY29kZUJsb2NrLT5tX25lZ0lDcykgewotICAgICAgICAg
ICAgbnVtTmVncysrOwotICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6
ZSgpOwotICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEpJVE5lZ0lDKiBuZWdJQyA6IGppdERh
dGEtPm1fbmVnSUNzKSB7CisgICAgICAgICAgICAgICAgbnVtTmVncysrOworICAgICAgICAgICAg
ICAgIHRvdGFsTmVnU2l6ZSArPSBuZWdJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGNvZGVCbG9jay0+bV9zdWJJQ3MpIHsKLSAg
ICAgICAgICAgIG51bVN1YnMrKzsKLSAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+
Y29kZVNpemUoKTsKKyAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1YklDIDogaml0RGF0YS0+
bV9zdWJJQ3MpIHsKKyAgICAgICAgICAgICAgICBudW1TdWJzKys7CisgICAgICAgICAgICAgICAg
dG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfTsKICAgICBoZWFwKCktPmZvckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDhkMTcxZTQ1MGQx
MmMwY2IzZWQ4NmNmMGU2ZDQ5YmRjODk3YTZmOGEuLmIwOTE2ODM2MDhmZTE4MjIzZmI2Y2I4OTFm
MDVhMzcwNTVjMWVlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKQEAgLTI0OSw2ICsyNDksMzEgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAgICAK
ICNpZiBFTkFCTEUoSklUKQorICAgIHN0cnVjdCBKSVREYXRhIHsKKyAgICAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4g
bV9zdHViSW5mb3M7CisgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgICAgIEJh
ZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Cisg
ICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CisgICAgICAgIEJhZzxCeVZhbEluZm8+IG1f
YnlWYWxJbmZvczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwor
ICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CisgICAgICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9y
cGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CisgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fcmFyZUNhc2VQcm9maWxlczsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OworICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICB9OworCisgICAgSklURGF0
YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKKyAgICB7
CisgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKKyAgICAgICAgICAgIHJldHVybiAqbV9q
aXREYXRhOworICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YVNsb3cobG9ja2VyKTsKKyAgICB9
CisgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQXJpdGhQcm9maWxlKiwgY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQXJpdGhQcm9maWxlKiwgY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoQXJpdGhQcm9maWxl
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI2Nyw4ICsyOTIsNiBAQCBjbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKSVRTdWJJQyogYWRkTWF0aElDKEFyaXRoUHJvZmls
ZSogcHJvZmlsZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJldHVybiBhZGRK
SVRTdWJJQyhwcm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIFN0cnVjdHVyZVN0dWJJbmZv
KiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKLSAgICBhdXRvIHN0dWJJbmZvQmVnaW4oKSB7IHJl
dHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9Ci0gICAgYXV0byBzdHViSW5mb0VuZCgpIHsgcmV0
dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CiAKICAgICAvLyBPKG4pIG9wZXJhdGlvbi4gVXNlIGdl
dFN0dWJJbmZvTWFwKCkgdW5sZXNzIHlvdSByZWFsbHkgb25seSBpbnRlbmQgdG8gZ2V0IG9uZQog
ICAgIC8vIHN0dWIgaW5mby4KQEAgLTI3NywxNCArMzAwLDQ4IEBAIGNsYXNzIENvZGVCbG9jayA6
IHB1YmxpYyBKU0NlbGwgewogICAgIEJ5VmFsSW5mbyogYWRkQnlWYWxJbmZvKCk7CiAKICAgICBD
YWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOwotICAgIGF1dG8gY2FsbExpbmtJbmZvc0Jl
Z2luKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KLSAgICBhdXRvIGNhbGxM
aW5rSW5mb3NFbmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuZW5kKCk7IH0KIAogICAgIC8v
IFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGlu
ZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UKICAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGlu
aW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQog
ICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0
IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5
dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgCisgICAgdm9pZCBzZXRK
SVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQorICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKKyAgICB9CisgICAgY29uc3Qg
SklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9qaXRDb2RlTWFwOworICAgIH0KKworICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3Rk
Ojp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKKyAgICBPcHRpb25hbDxDb2RlT3Jp
Z2luPiBmaW5kUEModm9pZCogcGMpOworCisgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRSYXJlQ2Fz
ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGlu
dCBieXRlY29kZU9mZnNldCk7CisgICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRGb3JC
eXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBpbnQgYnl0ZWNvZGVPZmZz
ZXQpOworCisgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQp
CisgICAgeworICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5
dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICByZXR1cm4gdmFs
dWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKKyAgICB9
CisKKyAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVP
ZmZzZXQobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIHJldHVybiB2YWx1ZSA+PSBP
cHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOworICAgIH0KKwogICAgIC8v
IFdlIGNhbGwgdGhpcyB3aGVuIHdlIHdhbnQgdG8gcmVhdHRlbXB0IGNvbXBpbGluZyBzb21ldGhp
bmcgd2l0aCB0aGUgYmFzZWxpbmUgSklULiBJZGVhbGx5CiAgICAgLy8gdGhlIGJhc2VsaW5lIEpJ
VCB3b3VsZCBub3QgYWRkIGRhdGEgdG8gQ29kZUJsb2NrLCBidXQgaW5zdGVhZCBpdCB3b3VsZCBw
dXQgaXRzIGRhdGEgaW50bwogICAgIC8vIGEgbmV3bHkgY3JlYXRlZCBKSVRDb2RlLCB3aGljaCBj
b3VsZCBiZSB0aHJvd24gYXdheSBpZiB3ZSBiYWlsIG9uIEpJVCBjb21waWxhdGlvbi4gVGhlbiB3
ZQpAQCAtMzAyLDE3ICszNTksNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsK
IAogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTElu
dENhbGxMaW5rSW5mbyopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIHNldEpJVENvZGVN
YXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAgICAgICBtX2ppdENvZGVNYXAg
PSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRD
b2RlTWFwKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVNYXA7Ci0gICAg
fQotI2VuZGlmCi0KICAgICBjb25zdCBJbnN0cnVjdGlvbiogb3V0T2ZMaW5lSnVtcFRhcmdldChj
b25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYyk7CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24pCkBAIC00NDIsMjcgKzQ4OCw2IEBAIGNs
YXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxM
aW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CiAKLSAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFJhcmVD
YXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIG51bWJlck9mUmFy
ZUNhc2VQcm9maWxlcygpIHsgcmV0dXJuIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCk7IH0KLSAg
ICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBi
eXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRl
Y29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgYm9vbCBsaWtlbHlUb1Rha2VT
bG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgICAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVu
c2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rh
a2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOwotICAgIH0KLQotICAgIGJvb2wgY291bGRUYWtlU2xv
d0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNCYXNlbGlu
ZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1bnNp
Z25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xv
d0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yUEMoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKIApAQCAtNDk5LDcgKzUyNCw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleC5iaXRzKCldOwogICAg
IH0KIAotICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciYgbGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVzKCkKKyAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVIb2xkZXImIGxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOwog
ICAgIH0KQEAgLTg0NywxMSArODcyLDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiAKICAgICB2b2lkIGVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVP
ZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCk7CiAKLSNpZiBF
TkFCTEUoSklUKQotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRy
PFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKLSAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMo
dm9pZCogcGMpOwotI2VuZGlmCi0KICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNUYWlsQ2FsbHMoKTsgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+CkBAIC04NjgsOCArODg4LDkgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMoKTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElu
bGluZUNhY2hlcygpOwotCisjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRh
bGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKICNlbHNlCkBAIC05NjUsMTcgKzk4Niw3IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3Rl
ckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwogI2VuZGlmCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwotICAgIEJhZzxK
SVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICBCYWc8
SklUTmVnSUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Ci0gICAgQmFn
PEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExp
bmtJbmZvczsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7Ci0gICAgU2VudGluZWxM
aW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHlt
b3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7Ci0gICAgSklU
Q29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0
RGF0YTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZh
bnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2Rl
IGJsb2NrCkBAIC05ODQsNyArOTk1LDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiAjZW5kaWYKICAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX2FyZ3VtZW50
VmFsdWVQcm9maWxlczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7Ci0gICAgU2VnbWVudGVkVmVjdG9yPFJh
cmVDYXNlUHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVByb2ZpbGVzOwogCiAgICAgLy8gQ29uc3RhbnQg
UG9vbAogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFy
cmllcl9Vbmtub3duKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAwYzEwOGQ4
YzZiYmE4MDJhNjY1YWMyODY5ODUzYWE2YjE4NTg5NTFhLi43ZTNjYzk0ZmE0NjExMWRjYmFiMGYy
MjA5ZjAxOTgyMDIzYjVmMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC02
MSw3ICs2MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9y
dFZhbHVlKENDYWxsSGVscGVycyYgaml0LCBKU1ZhbHVlUmVnCiAgICAgICAgIAogICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2sp
OwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9Ci0gICAgICAgICAg
ICB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkuYWRk
KGxvY2tlciwga2V5KTsKKyAgICAgICAgICAgIHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5sYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKS5hZGQobG9ja2VyLCBrZXkpOwogICAgICAgICBq
aXQuc3RvcmVWYWx1ZShyZWdzLCBwcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKIAogICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9Ci0gICAgICAgICAgICB1Lmxh
enlPcGVyYW5kLmNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkuYWRkKGxvY2tl
ciwga2V5KTsKKyAgICAgICAgICAgIHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5sYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZXMobG9ja2VyKS5hZGQobG9ja2VyLCBrZXkpOwogICAgICAgICAqcHJvZmls
ZS0+c3BlY0ZhaWxCdWNrZXQoMCkgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCBiMWRjMjViMWI4NzhmMGI1ZDRmNGQ0MWQ0MWRmMWZkYWQ5MjM2MmE0
Li5jMjM3ODU1NGExZmNhN2U5NTcyMTUwMmRjODEyNWFlMWJkNGZmM2ViIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNjk3OCw3ICs2
OTc4LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50
cnkoCiAgICAgICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlhbGl6ZShtX3Byb2ZpbGVkQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCkpOwogCiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFs
aXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKSk7
CisgICAgICAgIG1fbGF6eU9wZXJhbmRzLmluaXRpYWxpemUobG9ja2VyLCBtX3Byb2ZpbGVkQmxv
Y2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcyhsb2NrZXIpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIGRvIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWNhdXNlIHdlIHdhbnQgdG8g
ZW5jb3VyYWdlIFN0cnVjdHVyZVN0dWJJbmZvJ3MKICAgICAgICAgLy8gdG8gYmUgcG90ZW50aWFs
bHkgYWRkZWQgdG8gb3BlcmF0aW9ucyBhbmQgYmVjYXVzZSB0aGUgcHJvZmlsZWQgYmxvY2sgY291
bGQgYmUgaW4gdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBhNmFhMzI2YjlhMjdhNDM1
NDFkNTZlMTJkOGQ2NTYyODk2ZmI2ZDc4Li42OTg5NjM2MzdmZGZiMTc1NGE3MGNhMGQ3OTZiZjU4
Yzg1ZDc0OWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTIwNSwxMSArMjA1LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKFZNKiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwobG9ja2VyLCBieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMjE5LDE4ICsyMTksMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bFdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAg
ICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURp
cmVjdFB1dEJ5VmFsKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZv
LT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8
T3BQdXRCeVZhbERpcmVjdD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwor
ICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4o
bG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0K
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTI2MCwxMCArMjYwLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZm
b3J0KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZv
KiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIs
IGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNz
UHRyLCBKSVRBcnJheU1vZGUpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwg
SklUQXJyYXlNb2RlKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBQdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDYyOTJkYjIwYzczYjQyMGJiMmI2
YmViZmE2YjA4MmFiMGIzNDQ1NGQuLmU4YmFiZDI4NGU0Y2Y4M2U3ZmM3OGE1NmU2NmU1MzM0ZGQw
MzM4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApA
QCAtNzM3LDggKzczNyw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxP
cHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlCiAgICAgICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAg
ICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgSklU
Ojpjb21waWxlUHV0QnlWYWwoJnZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2Nr
ZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7
CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTgyMiw3ICs4MjEsNyBA
QCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogbwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSk7CiAKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRC
eVZhbCgmdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OworICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgJnZt
LCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAg
ICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTg4OSw3ICsxODg4LDcgQEAgc3Rh
dGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFy
cmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpOwogCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJnZtLCBj
b2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbChsb2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKaW5kZXggMmY0ZjMyZTEwNmI5ZGI1NDZiODRiMjRmN2I5ODk5NmM5ZDNkYjQ4
MS4uZWE2ZmVmMGI2NDhiYzM0ZDcwYjE0Zjc5ZjVhNGU1ZTRiYTY1YjIyNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTEyOTMsNyAr
MTI5Myw3IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0CiAgICAgfQogfQogCi12b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQordm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgCkBAIC0xMzgwLDcgKzEzODAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzcwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQog
ewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360957</attachid>
            <date>2019-02-01 20:50:40 -0800</date>
            <delta_ts>2019-02-01 21:53:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194187-20190201205040.patch</filename>
            <type>text/plain</type>
            <size>37792</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MzQ5NjE5YTYzNTYyNDBiZjU0MTJhYzI1MTY2NzY0NjdmNDI1MjE0Li42YzNhNWE1MDE1NGJjZDBh
OTg2YjlmM2I5Njg3OTdhNjY2MGI5YmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAxOS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERlY291cGxlIEpJVCByZWxhdGVkIGRhdGEgZnJvbSBDb2RlQmxv
Y2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDE4
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGVC
bG9jayBob2xkcyBidW5jaCBvZiBkYXRhIHdoaWNoIGlzIG9ubHkgdXNlZCBhZnRlciBKSVQgc3Rh
cnRzIGNvbXBpbGluZyBpdC4KKyAgICAgICAgV2UgaGF2ZSB0aHJlZSB0eXBlcyBvZiBkYXRhIGlu
IENvZGVCbG9jay4KKworICAgICAgICAxLiBUaGUgZGF0YSB3aGljaCBpcyBhbHdheXMgdXNlZC4g
Q29kZUJsb2NrIG5lZWRzIHRvIGhvbGQgaXQuCisgICAgICAgIDIuIFRoZSBkYXRhIHdoaWNoIGlz
IHRvdWNoZWQgZXZlbiBpbiBMTEludCwgYnV0IGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiBKSVQg
dGllcnMuIFRoZSBleGFtcGxlIGlzIHByb2ZpbGluZy4KKyAgICAgICAgMy4gVGhlIGRhdGEgd2hp
Y2ggaXMgdXNlZCBhZnRlciB0aGUgSklUIGNvbXBpbGVyIHN0YXJ0cyBydW5uaW5nIGZvciB0aGUg
Z2l2ZW4gQ29kZUJsb2NrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZGVjb3VwbGVzICgzKSBmcm9t
IENvZGVCbG9jayBhcyBDb2RlQmxvY2s6OkpJVERhdGEuIEV2ZW4gaWYgd2UgaGF2ZSBidW5jaCBv
ZiBDb2RlQmxvY2tzLCBvbmx5IHNtYWxsCisgICAgICAgIG51bWJlciBvZiB0aGVtIGdldHMgSklU
IGNvbXBpbGF0aW9uLiBBbHdheXMgYWxsb2NhdGluZyAoMykgZGF0YSBlbmxhcmdlcyB0aGUgc2l6
ZSBvZiBDb2RlQmxvY2ssIGxlYWRpbmcgdG8gdGhlCisgICAgICAgIG1lbW9yeSB3YXN0ZS4gUG90
ZW50aWFsbHkgd2UgY2FuIGRlY291cGxlICgyKSBpbiBhbm90aGVyIGRhdGEgc3RydWN0dXJlLCBi
dXQgd2UgZmlyc3QgZG8gKDMpIHNpbmNlICgzKSBpcyBiZW5lZmljaWFsCisgICAgICAgIGluIGJv
dGggbm9uLUpJVCBhbmQgKkpJVCogbW9kZXMuCisKKyAgICAgICAgSklURGF0YSBpcyBjcmVhdGVk
IG9ubHkgd2hlbiBKSVQgY29tcGlsZXIgd2FudHMgdG8gdXNlIGl0LiBTbyBpdCBjYW4gYmUgY29u
Y3VycmVudGx5IGNyZWF0ZWQgYW5kIHVzZWQsIHNvIGl0IGlzIGd1YXJkZWQKKyAgICAgICAgYnkg
dGhlIGxvY2sgb2YgQ29kZUJsb2NrLgorCisgICAgICAgIFRoZSBzaXplIG9mIENvZGVCbG9jayBp
cyByZWR1Y2VkIGZyb20gNTEyIHRvIDM1Mi4KKworICAgICAgICBUaGlzIHBhdGNoIGltcHJvdmVz
IG1lbW9yeSBmb290cHJpbnQgYW5kIGdldHMgMS4xJSBpbXByb3ZlbWVudCBpbiBSQU1pZmljYXRp
b24uCisKKyAgICAgICAgICAgIEZvb3RwcmludCBnZW9tZWFuOiAzNjY5NjUwMyAoMzQuOTk3IE1C
KQorICAgICAgICAgICAgUGVhayBGb290cHJpbnQgZ2VvbWVhbjogMzg1OTU5ODggKDM2LjgwOCBN
QikKKyAgICAgICAgICAgIFNjb3JlOiAzNzYzNDI2MyAoMzUuODkxIE1CKQorCisgICAgICAgICAg
ICBGb290cHJpbnQgZ2VvbWVhbjogMzcxNzI3NjggKDM1LjQ1MSBNQikKKyAgICAgICAgICAgIFBl
YWsgRm9vdHByaW50IGdlb21lYW46IDM4OTc4Mjg4ICgzNy4xNzMgTUIpCisgICAgICAgICAgICBT
Y29yZTogMzgwNjQ4MjQgKDM2LjMwMSBNQikKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5h
bGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRJQ1N0YXR1c01hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3Vi
SUMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5kU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFk
ZEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJVERhdGEpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bGlua0luY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5n
UG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWlu
Z0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0Fu
ZENvdW50TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2Zp
bGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpkdW1wTWF0aElDU3RhdHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGEpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENvZGVN
YXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzdHViSW5mb0JlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzdHViSW5mb0VuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExp
bmtJbmZvc0JlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlu
a0luZm9zRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlTWFw
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlJhcmVD
YXNlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlOjplbWl0UmVwb3J0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlOjpyZXBvcnRWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxP
cHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKwogMjAxOS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBzb21lIG9mIElzb1N1YnNw
YWNlcyBmb3IgSlNGdW5jdGlvbiBzdWJjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGNkMTBhNDU4M2E3YTUwZjJlZjQ4NTNhMDlkYTNm
YWY2M2Q1OWRlYWMuLjUzNDBmOTE3NTczZGNhMzhmMmRhZDEyZWVhNWMwNjhiNTczODYwNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04NjEs
MTAgKzg2MSwxMSBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIGRlc3RydWN0b3Jz
LgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJl
Z2luKCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
ID0gKml0ZXI7Ci0gICAgICAgIHN0dWItPmFib3V0VG9EaWUoKTsKLSAgICAgICAgc3R1Yi0+ZGVy
ZWYoKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAg
ICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KSB7CisgICAgICAgICAgICBzdHViSW5mby0+YWJvdXRUb0RpZSgpOworICAgICAgICAgICAgc3R1
YkluZm8tPmRlcmVmKCk7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KQEAgLTExMTIsOCArMTExMywxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpcwogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQot
ICAgICAgICAgICAgKCppdGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAg
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICBm
b3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
KyAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIApAQCAtMTM1MCwx
OCArMTM1MywyNSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygp
CiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQ29kZUJsb2NrOjpKSVREYXRhJiBDb2Rl
QmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCit7Cisg
ICAgQVNTRVJUKCFtX2ppdERhdGEpOworICAgIG1faml0RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
SklURGF0YT4oKTsKKyAgICByZXR1cm4gKm1faml0RGF0YTsKK30KKwogdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQogewotI2lmIEVOQUJMRShKSVQpCi0g
ICAgZm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
Ci0gICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CisgICAgaWYgKGF1dG8qIGppdERh
dGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dmlzaXRXZWFrKCp2bSgpKTsKIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9zdHViSW5m
b3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2Vz
KHRoaXMpOworICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERh
dGEtPm1fc3R1YkluZm9zKQorICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5j
ZXModGhpcyk7CiAgICAgfQotI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKIHsKQEAgLTEzOTQsMTIgKzE0MDQsMTQgQEAgdm9p
ZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIElD
U3RhdHVzTWFwJiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6
aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA6IG1fc3R1YkluZm9zKQotICAgICAgICAgICAgcmVzdWx0LmFkZChzdHViSW5mby0+Y29k
ZU9yaWdpbiwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gc3R1YkluZm87
Ci0gICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBtX2NhbGxMaW5rSW5m
b3MpCi0gICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLCBJ
Q1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvOwot
ICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQotICAgICAg
ICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIElD
U3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5ieVZhbEluZm8gPSBieVZhbEluZm87CisgICAgICAg
IGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgICAgICBmb3Ig
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8tPmNvZGVPcmlnaW4sIElDU3RhdHVzKCkp
Lml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9IHN0dWJJbmZvOworICAgICAgICAgICAgZm9yIChD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby0+Y29kZU9yaWdpbigpLCBJQ1N0
YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvOworICAg
ICAgICAgICAgZm9yIChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IGppdERhdGEtPm1fYnlWYWxJbmZv
cykKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmJ5VmFsSW5mbyA9IGJ5VmFs
SW5mbzsKKyAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTE0MjksMzQgKzE0
NDEsNDEgQEAgdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiByZXN1
bHQpCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CisgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIEpJVEFk
ZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIEpJVE11bElDKiBDb2RlQmxvY2s6
OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUs
IGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbik7CiB9CiAKIEpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7
CiB9CiAKIEpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJu
IG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKKyAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIFN0cnVjdHVy
ZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiB7Ci0gICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykg
ewotICAgICAgICBpZiAoc3R1YkluZm8tPmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAg
ICAgICAgIHJldHVybiBzdHViSW5mbzsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKKyAgICAg
ICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZv
cykgeworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4p
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZvOworICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMTQ2NCw0MCArMTQ4Myw3MCBAQCBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogQnlW
YWxJbmZvKiBDb2RlQmxvY2s6OmFkZEJ5VmFsSW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX2J5VmFsSW5mb3MuYWRkKCk7CisgICAg
cmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2J5VmFsSW5mb3MuYWRkKCk7CiB9CiAKIENh
bGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8oKQogewogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFk
ZCgpOworICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9jYWxsTGlua0luZm9zLmFk
ZCgpOwogfQogCiBDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2Fs
bExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVy
KS0+Y29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJu
ICppdGVyOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAo
YXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKSB7CisgICAgICAg
ICAgICBpZiAoY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFk
ZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRh
KGxvY2tlcik7CisgICAgaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNl
UHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJldHVybiAmaml0RGF0YS5tX3JhcmVDYXNl
UHJvZmlsZXMubGFzdCgpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50
IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdl
dCgpKSB7CisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBp
bnQ+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5t
X3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAgIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRl
Y29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2Rl
T2Zmc2V0KQoreworICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlmIChwcm9m
aWxlKQorICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOworICAgIHJldHVybiAwOwor
fQorCiB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSk7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwogICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5v
IG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2Fs
bAotICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBoYXZlIEpJ
VCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyB1
c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxs
IHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4KLSAgICBt
X3N0dWJJbmZvcy5jbGVhcigpOwotICAgIG1fY2FsbExpbmtJbmZvcy5jbGVhcigpOwotICAgIG1f
YnlWYWxJbmZvcy5jbGVhcigpOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGlzIGJlY2F1
c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBndWFyZGVk
IGJ5IHdoZXRoZXIKLSAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KLSAgICBtX3JhcmVDYXNlUHJv
ZmlsZXMuY2xlYXIoKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
eworICAgICAgICAvLyBXZSBjYW4gY2xlYXIgdGhlc2UgYmVjYXVzZSBubyBvdGhlciB0aHJlYWQg
d2lsbCBoYXZlIHJlZmVyZW5jZXMgdG8gYW55IHN0dWIgaW5mb3MsIGNhbGwKKyAgICAgICAgLy8g
bGluayBpbmZvcywgb3IgYnkgdmFsIGluZm9zIGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0
dGVtcHRzIHRvIHF1ZXJ5IHRoZXNlIGRhdGEKKyAgICAgICAgLy8gc3RydWN0dXJlcyB1c2luZyB0
aGUgY29uY3VycmVudCBBUEkgKGdldElDU3RhdHVzTWFwIGFuZCBmcmllbmRzKSB3aWxsIHJldHVy
biBub3RoaW5nIGlmIHdlCisgICAgICAgIC8vIGRvbid0IGhhdmUgSklUIGNvZGUuCisgICAgICAg
IGppdERhdGEtPm1fc3R1YkluZm9zLmNsZWFyKCk7CisgICAgICAgIGppdERhdGEtPm1fY2FsbExp
bmtJbmZvcy5jbGVhcigpOworICAgICAgICBqaXREYXRhLT5tX2J5VmFsSW5mb3MuY2xlYXIoKTsK
KyAgICAgICAgLy8gV2UgY2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0
byB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgorICAgICAgICAv
LyB0aGVyZSBpcyBKSVQgY29kZS4KKyAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVz
LmNsZWFyKCk7CisgICAgfQogfQogI2VuZGlmCiAKQEAgLTE1NDAsOCArMTU4OSwxMCBAQCB2b2lk
IENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsCiAgICAgfSk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGZvciAo
QnlWYWxJbmZvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKGJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKKyAgICBpZiAoYXV0byogaml0RGF0YSA9IG1f
aml0RGF0YS5nZXQoKSkgeworICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogaml0
RGF0YS0+bV9ieVZhbEluZm9zKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYnlWYWxJbmZv
LT5jYWNoZWRTeW1ib2wpOworICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBA
IC0xNzg2LDcgKzE4MzcsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01v
ZGUgc2hyaW5rTW9kZSkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAKLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyNpZiBFTkFCTEUoSklU
KQorICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKQorICAgICAgICBqaXRE
YXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyNlbmRpZgogICAgIAogICAg
IGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CiAgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMuc2hyaW5rVG9GaXQoKTsKQEAgLTE4MDMsMTMgKzE4NTcsMTcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKIHZvaWQgQ29kZUJsb2NrOjps
aW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyogaW5j
b21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2lu
Y29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2luY29taW5nQ2FsbHMucHVz
aChpbmNvbWluZyk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21p
bmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGluY29taW5nKTsKKyAgICB7CisgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOworICAgIH0KIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkBAIC0xODE4LDEwICsxODc2LDE3IEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9p
bmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgp
KQotICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKLSAgICB3
aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICBKSVREYXRhKiBqaXREYXRhID0gbnVsbHB0cjsK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGppdERhdGEpIHsK
KyAgICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IGppdERh
dGEtPm1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21p
bmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOworICAgICAgICB3aGlsZSAoaml0RGF0YS0+
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5n
UG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdQ
b2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiB9CiAKQEAgLTI1NzMsNyArMjYzOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyCiAgICAgfQogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIG1fbGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMobG9ja2VyKTsKKyAgICBs
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb25z
KGxvY2tlcik7CiAjZW5kaWYKIH0KIApAQCAtMjczMCw5ICsyNzk1LDkgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAgICAgfSk7
CiAgICAgZGF0YUxvZygiUmFyZUNhc2VQcm9maWxlIGZvciAiLCAqdGhpcywgIjpcbiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKTsgKytp
KSB7Ci0gICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmlsZShp
KTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVj
b2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOworICAgIGlmIChhdXRvKiBqaXREYXRhID0g
bV9qaXREYXRhLmdldCgpKSB7CisgICAgICAgIGZvciAoUmFyZUNhc2VQcm9maWxlKiBwcm9maWxl
IDogaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzKQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAg
IGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2Nv
dW50ZXIpOwogICAgIH0KIH0KICNlbmRpZiAvLyBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxF
KQpAQCAtMjkzOSwyNyArMzAwNCw2IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDb2RlQmxvY2s6Om91
dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAgIHJldHVybiBtX2lu
c3RydWN0aW9ucy0+YXQob2Zmc2V0ICsgdGFyZ2V0KS5wdHIoKTsKIH0KIAotUmFyZUNhc2VQcm9m
aWxlKiBDb2RlQmxvY2s6OmFkZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi17
Ci0gICAgbV9yYXJlQ2FzZVByb2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVP
ZmZzZXQpKTsKLSAgICByZXR1cm4gJm1fcmFyZUNhc2VQcm9maWxlcy5sYXN0KCk7Ci19Ci0KLVJh
cmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJl
Q2FzZVByb2ZpbGUsIGludD4oCi0gICAgICAgIG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2Fz
ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgIGdldFJhcmVDYXNlUHJv
ZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotdW5zaWduZWQgQ29kZUJsb2NrOjpyYXJlQ2FzZVBy
b2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBS
YXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCk7Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAgIHJldHVybiBwcm9m
aWxlLT5tX2NvdW50ZXI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEFyaXRoUHJvZmlsZSogQ29kZUJs
b2NrOjphcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0IGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIHJldHVybiBhcml0aFByb2ZpbGVGb3JQQyhtX2lu
c3RydWN0aW9ucy0+YXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpKTsKQEAgLTMwODAsMjAgKzMxMjQs
MjUgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJv
bEZsb3dQcm9maWxlcigpCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ29kZUJsb2NrOjpzZXRQQ1Rv
Q29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYgbWFwKSAK
IHsgCi0gICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKKyAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7CiB9CiAKIE9wdGlvbmFsPENvZGVPcmln
aW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBjKQogewotICAgIGlmIChtX3BjVG9Db2RlT3Jp
Z2luTWFwKSB7Ci0gICAgICAgIGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0g
bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgIHJldHVybiBjb2Rl
T3JpZ2luOwotICAgIH0KKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsK
KyAgICAgICAgICAgIGlmIChqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisgICAgICAg
ICAgICAgICAgaWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5t
X3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29kZU9yaWdpbjsKKyAgICAgICAgICAgIH0KIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9z
dHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWIgPSAqaXRlcjsKLSAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5zUEMocGMpKQot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWItPmNvZGVPcmlnaW4p
OworICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgeworICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihz
dHViSW5mby0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1faml0Q29kZS0+Zmlu
ZFBDKHRoaXMsIHBjKSkKQEAgLTMxOTUsMjQgKzMyNDQsMjYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAogICAgIGF1
dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGZvciAo
SklUQWRkSUMqIGFkZElDIDogY29kZUJsb2NrLT5tX2FkZElDcykgewotICAgICAgICAgICAgbnVt
QWRkcysrOwotICAgICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2NrLT5tX2ppdERh
dGEuZ2V0KCkpIHsKKyAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDogaml0RGF0YS0+
bV9hZGRJQ3MpIHsKKyAgICAgICAgICAgICAgICBudW1BZGRzKys7CisgICAgICAgICAgICAgICAg
dG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOworICAgICAgICAgICAgfQogCi0gICAg
ICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogY29kZUJsb2NrLT5tX211bElDcykgewotICAgICAg
ICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgdG90YWxNdWxTaXplICs9IG11bElDLT5jb2Rl
U2l6ZSgpOwotICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGpp
dERhdGEtPm1fbXVsSUNzKSB7CisgICAgICAgICAgICAgICAgbnVtTXVscysrOworICAgICAgICAg
ICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICBmb3IgKEpJVE5lZ0lDKiBuZWdJQyA6IGNvZGVCbG9jay0+bV9uZWdJQ3MpIHsK
LSAgICAgICAgICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgIHRvdGFsTmVnU2l6ZSArPSBuZWdJ
Qy0+Y29kZVNpemUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZm9yIChKSVROZWdJQyogbmVn
SUMgOiBqaXREYXRhLT5tX25lZ0lDcykgeworICAgICAgICAgICAgICAgIG51bU5lZ3MrKzsKKyAg
ICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgZm9yIChKSVRTdWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3Vi
SUNzKSB7Ci0gICAgICAgICAgICBudW1TdWJzKys7Ci0gICAgICAgICAgICB0b3RhbFN1YlNpemUg
Kz0gc3ViSUMtPmNvZGVTaXplKCk7CisgICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6
IGppdERhdGEtPm1fc3ViSUNzKSB7CisgICAgICAgICAgICAgICAgbnVtU3VicysrOworICAgICAg
ICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50
SUNzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA4
ZDE3MWU0NTBkMTJjMGNiM2VkODZjZjBlNmQ0OWJkYzg5N2E2ZjhhLi5iMDkxNjgzNjA4ZmUxODIy
M2ZiNmNiODkxZjA1YTM3MDU1YzFlZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCkBAIC0yNDksNiArMjQ5LDMxIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBKU0NlbGwgewogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3Vs
dCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICBzdHJ1Y3QgSklURGF0YSB7CisgICAgICAg
IFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgICAgICBCYWc8U3RydWN0dXJl
U3R1YkluZm8+IG1fc3R1YkluZm9zOworICAgICAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwor
ICAgICAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgICAgICBCYWc8SklUTmVnSUM+IG1f
bmVnSUNzOworICAgICAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworICAgICAgICBCYWc8QnlW
YWxJbmZvPiBtX2J5VmFsSW5mb3M7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExp
bmtJbmZvczsKKyAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOworICAgICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOworICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8UmFyZUNhc2VQcm9maWxlLCA4PiBtX3JhcmVDYXNlUHJvZmls
ZXM7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29k
ZU9yaWdpbk1hcDsKKyAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgfTsKKwor
ICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gKm1faml0RGF0YTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGFTbG93KGxvY2tl
cik7CisgICAgfQorICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYpOworCiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSos
IGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEFyaXRoUHJv
ZmlsZSosIGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKEFy
aXRoUHJvZmlsZSosIGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0yNjcsOCArMjkyLDYgQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhB
cml0aFByb2ZpbGUqIHByb2ZpbGUsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikgeyBy
ZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOyB9CiAKICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSk7Ci0gICAgYXV0byBzdHViSW5mb0Jl
Z2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsgfQotICAgIGF1dG8gc3R1YkluZm9F
bmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQogCiAgICAgLy8gTyhuKSBvcGVyYXRp
b24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5kIHRv
IGdldCBvbmUKICAgICAvLyBzdHViIGluZm8uCkBAIC0yNzcsMTQgKzMwMCw0OCBAQCBjbGFzcyBD
b2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBCeVZhbEluZm8qIGFkZEJ5VmFsSW5mbygp
OwogCiAgICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0luZm8oKTsKLSAgICBhdXRvIGNhbGxM
aW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyB9Ci0gICAg
YXV0byBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmVuZCgpOyB9
CiAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFyaWx5IGZv
ciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVyZSBoYWQg
YmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdy
ZSByZWFsbHkKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6
ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlu
a0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgIAorICAg
IHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKKyAgICB7CisgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7CisgICAgfQor
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQorICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICB9CisKKyAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CisgICAgT3B0aW9u
YWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsKKworICAgIFJhcmVDYXNlUHJvZmlsZSog
YWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCk7CisgICAgUmFyZUNhc2VQcm9m
aWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBpbnQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmls
ZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50IGJ5
dGVjb2RlT2Zmc2V0KTsKKworICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVj
b2RlT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxl
Q291bnRGb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
KCk7CisgICAgfQorCisgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZv
ckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICByZXR1cm4g
dmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKKyAgICB9
CisKICAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0ZW1wdCBjb21waWxp
bmcgc29tZXRoaW5nIHdpdGggdGhlIGJhc2VsaW5lIEpJVC4gSWRlYWxseQogICAgIC8vIHRoZSBi
YXNlbGluZSBKSVQgd291bGQgbm90IGFkZCBkYXRhIHRvIENvZGVCbG9jaywgYnV0IGluc3RlYWQg
aXQgd291bGQgcHV0IGl0cyBkYXRhIGludG8KICAgICAvLyBhIG5ld2x5IGNyZWF0ZWQgSklUQ29k
ZSwgd2hpY2ggY291bGQgYmUgdGhyb3duIGF3YXkgaWYgd2UgYmFpbCBvbiBKSVQgY29tcGlsYXRp
b24uIFRoZW4gd2UKQEAgLTMwMiwxNyArMzU5LDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGlj
IEpTQ2VsbCB7CiAKICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJG
cmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBz
ZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgbV9q
aXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29k
ZU1hcCYgaml0Q29kZU1hcCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9qaXRDb2Rl
TWFwOwotICAgIH0KLSNlbmRpZgotCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG91dE9mTGluZUp1
bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9m
ZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uKQpAQCAtNDQyLDI3ICs0
ODgsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25z
dCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
TExJbnRDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOwogCi0gICAgUmFyZUNhc2VQcm9maWxl
KiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6
ZSgpOyB9Ci0gICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNv
dW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYg
KCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6
bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KLSAgICBib29sIGNv
dWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmICgh
aGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6OmNv
dWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7Ci0gICAgfQotCiAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
IGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvclBDKGNv
bnN0IEluc3RydWN0aW9uKik7CiAKQEAgLTQ5OSw3ICs1MjQsNyBAQCBjbGFzcyBDb2RlQmxvY2sg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW5zKClbaW5kZXguYml0
cygpXTsKICAgICB9CiAKLSAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xk
ZXImIGxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpCisgICAgQ29tcHJlc3NlZExhenlPcGVyYW5k
VmFsdWVQcm9maWxlSG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIHJldHVybiBtX2xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlczsKICAgICB9CkBAIC04NDcsMTEgKzg3Miw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBKU0NlbGwgewogCiAgICAgdm9pZCBlbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZv
ckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQp
OwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7Ci0gICAgT3B0aW9uYWw8Q29kZU9yaWdp
bj4gZmluZFBDKHZvaWQqIHBjKTsKLSNlbmRpZgotCiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzVGFpbENhbGxzKCk7IH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgpAQCAtODY4LDggKzg4OCw5IEBAIGNsYXNzIENvZGVC
bG9jayA6IHB1YmxpYyBKU0NlbGwgewogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxM
SW50SW5saW5lQ2FjaGVzKCk7CisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKLQorI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CiAjZWxzZQpAQCAtOTY1LDE3ICs5ODYs
NyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKICNlbmRpZgog
I2lmIEVOQUJMRShKSVQpCi0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsK
LSAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwotICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7
Ci0gICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNz
OwotICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKLSAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywg
QmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwotICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwotICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRE
YXRhPiBtX2ppdERhdGE7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlz
IGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJv
ZmlsZWQgY29kZSBibG9jawpAQCAtOTg0LDcgKzk5NSw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBKU0NlbGwgewogI2VuZGlmCiAgICAgUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4g
bV9hcmd1bWVudFZhbHVlUHJvZmlsZXM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOwotICAgIFNlZ21lbnRl
ZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fcmFyZUNhc2VQcm9maWxlczsKIAogICAgIC8v
IENvbnN0YW50IFBvb2wKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVnaXN0ZXIpID09IHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3NhbWVfc2l6ZV9h
c19Xcml0ZUJhcnJpZXJfVW5rbm93bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5k
ZXggMGMxMDhkOGM2YmJhODAyYTY2NWFjMjg2OTg1M2FhNmIxODU4OTUxYS4uN2UzY2M5NGZhNDYx
MTFkY2JhYjBmMjIwOWYwMTk4MjAyM2I1ZjAxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6
OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZwogICAgICAgICAK
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9j
ay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQot
ICAgICAgICAgICAgdS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlcygpLmFkZChsb2NrZXIsIGtleSk7CisgICAgICAgICAgICB1LmxhenlPcGVyYW5kLmNvZGVC
bG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikuYWRkKGxvY2tlciwga2V5KTsK
ICAgICAgICAgaml0LnN0b3JlVmFsdWUocmVncywgcHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODksNyArODksNyBAQCB2b2lkIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFsdWUgdmFsdWUpCiAKICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9s
b2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQotICAgICAg
ICAgICAgdS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygp
LmFkZChsb2NrZXIsIGtleSk7CisgICAgICAgICAgICB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+
bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKGxvY2tlcikuYWRkKGxvY2tlciwga2V5KTsKICAgICAg
ICAgKnByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggYjFkYzI1YjFiODc4ZjBiNWQ0ZjRkNDFkNDFkZjFm
ZGFkOTIzNjJhNC4uYzIzNzg1NTRhMWZjYTdlOTU3MjE1MDJkYzgxMjVhZTFiZDRmZjNlYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAg
LTY5NzgsNyArNjk3OCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmVTdGFja0VudHJ5KAogICAgICAgICBtX2V4aXRQcm9maWxlLmluaXRpYWxpemUobV9wcm9maWxl
ZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKIAogICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9sYXp5T3BlcmFu
ZHMuaW5pdGlhbGl6ZShsb2NrZXIsIG1fcHJvZmlsZWRCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVzKCkpOworICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgbV9w
cm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMobG9ja2VyKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBkbyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVjYXVzZSB3
ZSB3YW50IHRvIGVuY291cmFnZSBTdHJ1Y3R1cmVTdHViSW5mbydzCiAgICAgICAgIC8vIHRvIGJl
IHBvdGVudGlhbGx5IGFkZGVkIHRvIG9wZXJhdGlvbnMgYW5kIGJlY2F1c2UgdGhlIHByb2ZpbGVk
IGJsb2NrIGNvdWxkIGJlIGluIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggYTZhYTMy
NmI5YTI3YTQzNTQxZDU2ZTEyZDhkNjU2Mjg5NmZiNmQ3OC4uNjk4OTYzNjM3ZmRmYjE3NTRhNzBj
YTBkNzk2YmY1OGM4NWQ3NDlhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yMDUsMTEg
KzIwNSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNv
ZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChWTSogdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBq
aXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGxvY2tl
ciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKFZNKiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTIxOSwx
OCArMjE5LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFs
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4Owot
ICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAgICAgaml0LnByaXZhdGVD
b21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVEaXJlY3RQdXRCeVZhbChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlW
YWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNKiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9
IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlW
YWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0yNjAsMTAgKzI2
MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21w
aWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0
QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0
dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA2MjkyZGIyMGM3
M2I0MjBiYjJiNmJlYmZhNmIwODJhYjBiMzQ0NTRkLi5lOGJhYmQyODRlNGNmODNlN2ZjNzhhNTZl
NjZlNTMzNGRkMDMzOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKQEAgLTczNyw4ICs3MzcsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRy
eVB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZQogICAg
ICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLQotICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0
QnlWYWwobG9ja2VyLCAmdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBh
cnJheU1vZGUpOwogICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MjIs
NyArODIxLDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9w
dGltaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG8KICAgICAgICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAg
ICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
ciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxl
RGlyZWN0UHV0QnlWYWwoJnZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChs
b2NrZXIsICZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9k
ZSk7CiAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4ODksNyArMTg4
OCw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxPcHRpbWl6ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlCiAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNv
ZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5
VmFsKCZ2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7
CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwobG9ja2VyLCAmdm0sIGNvZGVC
bG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDJmNGYzMmUxMDZiOWRiNTQ2Yjg0YjI0ZjdiOTg5
OTZjOWQzZGI0ODEuLmVhNmZlZjBiNjQ4YmMzNGQ3MGIxNGY3OWY1YTRlNWU0YmE2NWIyMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBA
IC0xMjkzLDcgKzEyOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdAogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3Zv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIApAQCAtMTM4MCw3ICsxMzgwLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3MKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQordm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Cg==
</data>
<flag name="review"
          id="377647"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>